我有一个字符向量,其中包含.GlobalEnv
中结构相同变量的名称。我想从每个变量的相同因子中删除等级。
我如何,例如扩展下面的代码,实际更新全局环境中的变量?查看示例数据,意味着在z
和W
之后删除Q
和subset
不存在的因子assign
的级别.GlobalEnv
。
lapply(mget(var_list, .GlobalEnv), function(x) levels(x$z) <- droplevels(x$z))
我以为我可以做一些类似下面的例子来改变例如rownames
使用lapply
list_of_dfs <- lapply(list_of_dfs, "rownames<-", NULL)
z <- c("a",'a','b','a','c','d','b','d','d','b')
x <- c(10,2,33,41,5,64,17,11,22,1)
y <- c('W','W','W','W','W','Q','Q','Q','Q','Q')
df <- data.frame(cbind(z,x,y))
var_list <- c('W', 'Q')
# subsetting and assigning variables
for(i in var_list){
assign(i, subset(df, y %in% i), envir=.GlobalEnv)
}
答案 0 :(得分:2)
你在这一行做什么
lapply(mget(var_list, .GlobalEnv), function(x) levels(x$z) <- droplevels(x$z))
是您修改本地变量x
,而不是Q
中的变量W
和.GlobalEnv
。
您可以尝试以下内容:
lapply(var_list, function(x) assign(x, droplevels(get(x, envir=.GlobalEnv)), .GlobalEnv))
这会从所有列中删除未使用的级别,而不仅仅是z
。
要仅从z
删除级别,您可以尝试:
lapply(var_list, function(x)
eval(parse(text=paste0(x, "['z'] <<- droplevels(", x,"['z'])"))))