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

Posted

技术标签:

【中文标题】R从字符向量输入名称到函数公式语句【英文标题】:R input names from a character vector to a function formula statement 【发布时间】:2016-04-22 07:01:56 【问题描述】:

我很清楚对于下面描述的特定问题有更好的解决方案(例如,Hmisc 中的corrcorr,正如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从字符向量输入名称到函数公式语句的主要内容,如果未能解决你的问题,请参考以下文章

R语言常用函数(基本)

向量旋转公式:

excel表格函数公式教学 你知道吗?

梯度的计算公式是啥?

Excel公式 查找字符串中的关键字并输出对应值

excel自动获得幂函数R平方