我想在用assign()
创建的数据框中添加新列。
varname <- "vehicles"
assign(
x = varname,
value = cars
)
get(varname)
get(varname)$AnotherCol <- "Test"
但是当我运行这段代码时,会出现此错误。
Error in get(varname)$AnotherCol <- "Test" :
could not find function "get<-"
如何在使用assign()
创建的变量中添加列?
答案 0 :(得分:2)
如果我们确实需要基于字符串对象varname
创建一个新列,则再次调用assign
并为新列“ AnotherCol”分配([[<-
) value
“测试”
assign(varname, `[[<-`(get(varname), "AnotherCol", value = "Test"))
head(get(varname))
# speed dist AnotherCol
#1 4 2 Test
#2 4 10 Test
#3 7 4 Test
#4 7 22 Test
#5 8 16 Test
#6 9 10 Test
注意:但这不是推荐的方法。可以不使用assign
或get
来完成。假设分配来自循环,最好创建一个list
,而不是在全局环境中创建多个对象
例如可以使用list
方法
base R
个数据集中创建带有值'Test'的'AnotherCol'
lapply(list(cars, mtcars), transform, AnotherCol = "Test")
或使用tidyverse
方法
library(tidyverse)
lst(cars, mtcars) %>%
map(mutate, AnotherCol = "Test")