Tôi có hai đoạn mã tôi thường sử dụng trong đó tôi sử dụng <<-
để gán cho môi trường Toàn cầu từ bên trong một hàm. Tôi biết tôi nên sử dụng assign
vì nó cho phép kiểm soát tốt hơn và dễ dự đoán hơn. Tôi cố gắng để quấn quanh đầu tôi sử dụng assign
nhưng không thể chuyển mã <<-
mã có sử dụng gán:Cách tránh << - bằng cách chỉ định
một tập dữ liệu GIẢ VÀ CÁC hai đoạn mã QUAN ĐẾN VIỆC <<-
#CREATE A FAKE DATA SET
df <- data.frame(
x.2=rnorm(25),
y.2=rnorm(25),
g=rep(factor(LETTERS[1:5]), 5)
)
#Use split to make a list of data frames
LIST <- split(df, df$g) #split it into a list of data frames
NAMES <- names(LIST) #save the names of this for later use
LIST <- lapply(seq_along(LIST), function(x) as.data.frame(LIST[[x]])[, 1:2])
#THE TWO PIECES OF CODE THAT USE <<-
#Use Global Assignment to Change All Variable Names of Data Frames in a List
lapply(seq_along(LIST), function(x) names(LIST[[x]]) <<-
unlist(strsplit(names(LIST[[x]])[1:length(names(LIST[[x]]))],
".", fixed=T))[c(T, F)]
)
LIST
#Rename All the Data Frames in the List Using Global Assignment
lapply(seq_along(LIST), function(x) names(LIST)[[x]] <<- NAMES[x])
LIST
Nỗ lực sử dụng của tôi để chỉ định:
lapply(seq_along(LIST), function(x) {
assign(names(LIST[[x]]),
unlist(strsplit(names(LIST[[x]])[1:length(names(LIST[[x]]))],
".", fixed=T))[c(T, F)], envir=.GlobalEnv)
}
)
LIST
lapply(seq_along(LIST), function(x) assign(names(LIST)[[x]],
NAMES[x], envir=.GlobalEnv))
LIST
Hãy giúp tôi làm điều này một cách chính xác và khắc phục những gì là sai với cách tiếp cận của tôi. Cảm ơn bạn trước.
tên của đối tượng không phải là 'tên' trong môi trường, do đó bạn không thể sử dụng' assign' tại đây. – kohske
@kohske Cảm ơn bạn. Bạn có thể cho điều đó cho câu trả lời sau đó và tôi sẽ chấp nhận nó? –