我想将转换应用于许多data.frame对象。我该怎么办?我以为我可以通过这些物体以某种方式循环,但到目前为止还没有结果。我想我可能需要将对data.frame对象的引用传递给列表或其他类型的集合,然后循环遍历这些引用。这在R中是否可能?
#reproducible data
foo=data.frame(c(1, 1), c(1, 1))
bar=data.frame(c(2, 2), c(2, 2))
#apply transformations
for (dat in list(foo, bar)){
dat$NEW <- 9999
print(dat)
}
#of course nothing happened since data.frames were copied to list object
print(foo) #no change
print(bar) #no change
#expected output
foo$NEW <- 9999
bar$NEW <- 9999
print(foo) #looks good
print(bar) #looks good
答案 0 :(得分:1)
您可以执行类似的操作并继续使用data.frames列表
foo=data.frame(a = c(1, 1), b = c(1, 1))
bar=data.frame(a = c(2, 2), b = c(2, 2))
dat <- list(foo = foo, bar = bar)
dat <- lapply(dat, function(x){
x$NEW = 999
x
})
现在dat看起来如下:
$foo
a b NEW
1 1 1 999
2 1 1 999
$bar
a b NEW
1 2 2 999
2 2 2 999
如果您想强制foo
与dat$foo
相同,则可以使用
mapply(assign, names(dat), dat, MoreArgs = list(envir = .GlobalEnv))
导致
> foo
a b NEW
1 1 1 999
2 1 1 999
和bar