我正在尝试做一些非常微不足道的事情,但我遇到了一堵墙。我想要一个存储一些变量均值的向量。
我试过了:
vars <- c("eins_d$q05a", "eins_d$q05b", "eins_d$q05c", "eins_d$q05d", "eins_d$q05e", "eins_d$q05f", "eins_d$q05g", "eins_d$q05h", "eins_d$q05i", "eins_d$q05j")
means <- lapply(vars, mean)
我也尝试过:
means <- numeric()
for (var in c("eins_d$q05a", "eins_d$q05b", "eins_d$q05c", "eins_d$q05d", "eins_d$q05e", "eins_d$q05f", "eins_d$q05g", "eins_d$q05h", "eins_d$q05i", "eins_d$q05j")) {
means <- append(means, mean(var))
}
在这两种情况下,它都没有意识到我希望使用变量完成操作,而是将参数作为字符串,然后抱怨参数不是数字。
但是,如果我这样做,但不是明确地给出名称,而是使用:
定义列表vars <- names(eins_d[5:15])
它按预期工作。
我做错了什么?
答案 0 :(得分:2)
要清楚地了解会发生什么,请考虑我只希望var1
和var2
的平均值来自跟随数据框,
df <- data.frame(var1 = 1:5, var2 = 2:6, var3 = 3:7)
# var1 var2 var3
#1 1 2 3
#2 2 3 4
#3 3 4 5
#4 4 5 6
#5 5 6 7
#so our vars will be,
vars <- c('var1', 'var2')
lapply(vars, mean) #--> Tries to find the mean of the strings 'var1' and 'var2'
#[[1]]
#[1] NA
#[[2]]
#[1] NA
#whereas,
lapply(df[vars], mean) #--> Tries to find the mean of columns 'var1' and 'var2' from 'df'
#$var1
#[1] 3
#$var2
#[1] 4