1

当我想使用循环为多个数据帧分配新值时,就会出现问题。

我知道正确的方法是

for (df.name in c('df1', 'df2', 'df3')) {
  assign(df, new.value)
}

我的问题是,为什么我不能这样做

for (df.name in c('df1', 'df2', 'df3')) {
  eval(parse(text=df.name)) <- new.value
}

谢谢!

4

1 回答 1

7

您可以使用评估/解析:

eval(parse(text= paste(df.name, "<- new.value")))

你得到的错误,

赋值目标扩展到非语言对象

是因为eval(parse(text=df.name))返回变量df1,它不是要评估的 R 表达式。


请记住,eval/parse 是黑暗的、危险的、魔法,会导致无法维护的僵尸代码。如果您能找到不同的方式来编写代码,请选择它。


如评论中所述,如果您有多个具有相似属性的数据框,则将它们作为列表使用通常更容易。

df_list <- list(df1 = df1, df2 = df2, df3 = df3)

然后,您可以使用循环操作每个数据帧,或使用orlapply将它们组合成单个数据帧。rbinddplyr::bind_rows

于 2013-05-29T10:10:10.720 回答