R:将值分配给数据框中的动态变量时遇到问题

Posted

技术标签:

【中文标题】R:将值分配给数据框中的动态变量时遇到问题【英文标题】:R: trouble assigning values to a dynamic variable in a dataframe 【发布时间】:2018-07-05 06:49:27 【问题描述】:

我正在尝试将值分配给用户定义的数据框变量。用户在数据帧 df 中指定变量的名称,我们称之为 x。为简单起见,我想将值 3 分配给用户指定的列中的所有内容。简化代码为:

variableName <- paste("df$", x, sep="")
eval(parse(text=variableName)) <- 3

但我得到一个错误:

文件错误(文件名,“r”):无法打开连接

另外:警告信息:

在文件中(文件名,“r”): 无法打开文件“df$x”:没有这样的文件或目录

我尝试了各种补救措施都无济于事。如果我只是尝试打印列的值。

eval(parse(text=variableName)) 

我没有收到任何错误,并且打印正常。只有当我尝试给该列一个值时,我才会得到错误。任何帮助将不胜感激。

【问题讨论】:

你为什么不用df[["x"]] &lt;- 3 @RuiBarradas 我认为可能会丢失 x 周围的引号,我认为 OP 正在寻找存储在 x 而不是 x 本身的值。 【参考方案1】:

我认为问题在于无法在作业的 LHS 上使用 eval() 的结果。

df = data.frame(foo = 1:5,
                bar = -3)
x = "bar"
variableName <- paste("df$", x, sep="")
eval(parse(text=variableName)) <- 3
#> Warning in file(filename, "r"): cannot open file 'df$bar': No such file or
#> directory
#> Error in file(filename, "r"): cannot open the connection

## This error is a bit misleading. Breaking it apart I get a different error.

eval(expression(df$bar)) <- 3
#> Error in eval(expression(df$bar)) <- 3: could not find function "eval<-"


## And it works if you put it all in the string to be parsed. 

ex1 <- paste0("df$", x, "<-3")
eval(parse(text=ex1))

df
#>   foo bar
#> 1   1   3
#> 2   2   3
#> 3   3   3
#> 4   4   3
#> 5   5   3

## But I doubt that's the best way to do it!

【讨论】:

以上是关于R:将值分配给数据框中的动态变量时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

将值分配给二维数组时的垃圾值

将列值分配给数据框中的变量

用户定义函数中的子集以将值分配给目标列

将预定义的数字分配给数据框中的列行值

如何将值向量分配给R中igraph中的顶点标签?

通过R中的变量将值传递给函数