已创建 R 数据帧列,但“exists”为 false,并且“get”失败 [重复]

R dataframe column created, but 'exists' is false and 'get' fails [duplicate]

提问人:David Manheim 提问时间:8/3/2023 最后编辑:David Manheim 更新时间:8/7/2023 访问量:40

问:

这个问题在这里已经有答案了:
4个月前关闭。

这篇文章在 4 个月前被编辑并提交审核,未能重新打开帖子:

原始关闭原因未解决

最小可重现示例:

times <- 0:365
df <- data.frame(times)
for (i in 1:5){
  for(j in 3:6){
    scen_name=paste("Scen",j,i,sep="_")
    scen_out <- sample(times)
    df <- cbind(df, scen_out)
    colnames(df)[length(df)] <- scen_name
  }
}
# Get user input for which variable to view / graph

Selection <- "Scen_4_2"

get(paste0('df$',Selection)))

这将无法检索数据。

并返回 false - 但我可以很好地检索它。exists(paste0('df$',Selection)))df$Scen_4_2

请注意,我需要间接引用变量,因为正在生成名称 - 因此检查或直接引用变量是无关紧要的。

r 变量

评论

0赞 David Manheim 8/3/2023
我不能直接执行此操作,因为我需要能够在更复杂的数据帧中遍历列;df$Var.1、df$Var.2 等,我想使用 get() 来做到这一点。
0赞 Darren Tsai 8/3/2023
您可以循环访问列名,并用于提取值。例如[[for(x in names(df)) { sum(df[[x]]) }
0赞 David Manheim 8/3/2023
太好了,但这不是我需要做的 - 我只需要特定的列。
0赞 zx8754 8/3/2023
查看链接帖子中的解决方案是否适用于您的情况。根据我从您的帖子中了解到的情况,我认为这里没有理由使用或.getexists
0赞 David Manheim 8/3/2023
@zx8754 其他不使用 get 或不存在的解决方案是无关紧要的,根据我留下的先前评论,我留下了澄清这一点,但在问题结束时显然被忽略了。

答:

-1赞 David Manheim 8/3/2023 #1

我现在意识到,问题在于需要将 DataFrame 指定为检查列的环境,或者需要附加 DataFrame。

所以:

get(Selection, envir=as.environment(df))

或者(尽管通常不受欢迎),如果附加数据框是可以接受的:

attach(df)
get(Selection)

评论

1赞 zx8754 8/3/2023
不鼓励附加:stackoverflow.com/q/10067680/680068
0赞 MrFlick 8/3/2023
使用会更直接。该语法也允许变量,或者如果您只是想知道它是否存在df[['times']]a <- "times"; df[["times"]]"times" %in% names(df)
0赞 David Manheim 8/7/2023
@MrFlick - 当然,但它不能做需要的事情,因为在实际应用程序中名称会有所不同。
0赞 MrFlick 8/7/2023
@DavidManheim我不同意你的评论。 将返回与 相同的结果。运算符可以采用字符变量。df[[Selection]]get(Selection, envir=as.environment(df))[[