【问题标题】:R input names from a character vector to a function formula statementR从字符向量输入名称到函数公式语句
【发布时间】: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”,请解释原因。

【问题讨论】:

    标签: 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 有一个公式类......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2021-12-05
    • 2015-09-16
    相关资源
    最近更新 更多