尝试添加新列时,找不到函数“ get <-”

时间:2018-09-20 17:18:41

标签: r

我想在用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()创建的变量中添加列?

1 个答案:

答案 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

注意:但这不是推荐的方法。可以不使用assignget来完成。假设分配来自循环,最好创建一个list,而不是在全局环境中创建多个对象

例如可以使用list方法

base R个数据集中创建带有值'Test'的'AnotherCol'

lapply(list(cars, mtcars), transform, AnotherCol = "Test")

或使用tidyverse方法

library(tidyverse)
lst(cars, mtcars) %>%
       map(mutate, AnotherCol = "Test")