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"]] <- 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:将值分配给数据框中的动态变量时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章