R输入从字符向量到函数公式语句的名称

时间:2016-01-16 21:11:14

标签: r

我很清楚,对于下面描述的特定问题,有更好的解决方案(例如,cor中的rcorrHmisc,如here所述。这只是一个更常见的R问题的例子,我无法弄清楚:将一个字符向量中的多个变量名称传递给函数中的公式语句。

假设有一个由数字变量组成的数据集。

vect.a <- rnorm(n = 20, mean = 0, sd = 1)
vect.b <- rnorm(n = 20, mean = 0, sd = 1)
vect.c <- rnorm(n = 20, mean = 0, sd = 1)
vect.d <- rnorm(n = 20, mean = 0, sd = 1)
dataset <- data.frame(vect.a, vect.b, vect.c, vect.d)
names(dataset) <- c("var1", "var2", "var3", "var4")

必须使用函数~ VarA + VarBcor.test类型的公式语句对此数据集中的每个可能变量对执行相关性测试:

for (i in 1:(length(names(dataset))-1)){
    for (j in (i+1):length(names(dataset))) {
        cor.test(~ names(dataset)[i] + names(dataset)[j], data = "dataset")
    }
}

返回错误:'character'类型的无效'envir'参数

我假设一个字符串与公式语句不兼容,但哪个类与它兼容?如果整个方法都是错误的,请解释原因并提供或指出替代解决方案。如果该方法以某种方式“丑陋”“非R”,请解释原因。

1 个答案:

答案 0 :(得分:2)

通过使用带有字符串参数的as.formula来获得该公式。

>> x <- c('x1','x2','x3')
>> f <- as.formula(paste('~ ', x[1], ' + ', x[2]))
>> f
~x1 + x2
>> class(f)
[1] "formula"

此处还有另一个问题,data="dataset"应为data=dataset,因为dataset是一个名称。

> dataset <- data.frame(a=1:5, b=sample(1:5))
> cor.test(~ a + b, data="dataset")
Error in eval(predvars, data, env) : 
  invalid 'envir' argument of type 'character'
> cor.test(~ a + b, data=dataset)

Pearson's product-moment correlation
...