R从字符向量输入名称到函数公式语句
Posted
技术标签:
【中文标题】R从字符向量输入名称到函数公式语句【英文标题】:R input names from a character vector to a function formula statement 【发布时间】:2016-04-22 07:01:56 【问题描述】:我很清楚对于下面描述的特定问题有更好的解决方案(例如,Hmisc
中的cor
和rcorr
,正如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
内的~ VarA + VarB
类型的公式语句,对该数据集中的每个可能的变量对执行相关性测试@:
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】:您可以通过使用带有字符串参数的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
...
【讨论】:
如图所示,这会创建一个“公式”类的对象 f,但是当我在 cor.test 调用中将此对象作为参数输入时,它会返回相同的错误:类型为 ' 的无效 'envir' 参数字符'。 我的错,这解决了问题。谢谢你。我很惊讶地发现 R 有一个公式类......以上是关于R从字符向量输入名称到函数公式语句的主要内容,如果未能解决你的问题,请参考以下文章