我很清楚,对于下面描述的特定问题,有更好的解决方案(例如,cor
中的rcorr
和Hmisc
,如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 + VarB
中cor.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”,请解释原因。
答案 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
...