lapply的R变量列表导致错误:“参数不是数字或逻辑:返回NA”

时间:2016-09-21 12:54:35

标签: r

我正在尝试做一些非常微不足道的事情,但我遇到了一堵墙。我想要一个存储一些变量均值的向量。

我试过了:

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])

它按预期工作。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

要清楚地了解会发生什么,请考虑我只希望var1var2的平均值来自跟随数据框,

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