【发布时间】:2012-03-16 01:30:46
【问题描述】:
我有两段我经常使用的代码,其中我使用<<- 从函数中分配给全局环境。我知道我应该使用assign,因为它可以提供更好的控制并且更可预测。我正在尝试使用 assign 来解决问题,但无法将 <<- 代码转换为使用 assign 的代码:
一个伪造的数据集和两段带有<<-的代码
#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
我尝试使用 assign:
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
请帮助我正确地做到这一点,并解释我的方法有什么问题。提前谢谢你。
【问题讨论】:
-
对象名称在环境中不是
name,因此您不能在此处使用assign。 -
@kohske 谢谢。那你能不能给出答案,我会接受吗?
标签: r