提问人:Polina Putrik 提问时间:9/21/2021 最后编辑:Rui BarradasPolina Putrik 更新时间:9/21/2021 访问量:1378
在 R 中使用字符串列表作为变量的 for 循环 - 带引号和不带引号
for loop in R using a list of strings as variables - with and without quotes
问:
我想创建一个循环,该循环将运行字符串列表。此字符串列表包含需要插入语法的变量的名称。我的语法有时需要带引号(然后它起作用),有时需要不带引号(然后它失败了)。我已经尝试了这里的解决方案:从 R 中的字符向量中删除引号,但它不起作用。
这是我尝试执行的操作示例:
library(dplyr)
data(mtcars)
list=c("mpg", "cyl")
for (i in list) {
print(i)
df=mtcars[,c(i, "gear")] #this works
df1 = group_by(df, gear) %>% summarize(Y=sum(i)) # this doesn't work - it doesn't recognize i as variable name
}
感谢您的帮助
问候 波琳娜
答:
1赞
Quixotic22
9/21/2021
#1
尝试用 .i
get
for (i in list) {
print(i)
df=mtcars[,c(i, "gear")] #this works
df1 = group_by(df, gear) %>% summarize(Y=sum(get(i))) # this doesn't work - it doesn't recognize i as variable name
}
也值得一读等等sym
!!
评论
0赞
Limey
9/21/2021
正如@RuiBarradas在下面指出的那样,这会覆盖循环每次迭代的数据帧,这不太可能是 OP 的意图。df1
0赞
Rui Barradas
9/21/2021
#2
要更正访问字符变量给出的变量的错误,请使用 。!!rlang::sym(i)
for (i in list) {
print(i)
df=mtcars[,c(i, "gear")] #this works
df1 = group_by(df, gear) %>% summarize(Y = sum(!!rlang::sym(i)))
}
但是问题的代码中还有另一个错误,每次通过循环都会重写输出。
这是一个更正后的循环。df1
df_list <- lapply(list, function(i){
print(i)
df <- mtcars[,c(i, "gear")] #this works
group_by(df, gear) %>% summarize(Y = sum(!!rlang::sym(i)))
})
df_list[[1]]
## A tibble: 3 x 2
# gear Y
# <dbl> <dbl>
#1 3 242.
#2 4 294.
#3 5 107.
评论
0赞
Rui Barradas
9/22/2021
@aosmith 您可以将您的评论作为答案发布,恕我直言,这正是问题所要求的,当求和作为字符变量给出时要放入什么。sum
评论
list