提问人:David Manheim 提问时间:8/3/2023 最后编辑:David Manheim 更新时间:8/7/2023 访问量:40
已创建 R 数据帧列,但“exists”为 false,并且“get”失败 [重复]
R dataframe column created, but 'exists' is false and 'get' fails [duplicate]
问:
最小可重现示例:
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
请注意,我需要间接引用变量,因为正在生成名称 - 因此检查或直接引用变量是无关紧要的。
答:
-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))
[[
评论
[[
for(x in names(df)) { sum(df[[x]]) }
get
exists