通过函数将公式传递给cor.test

时间:2017-12-01 13:46:26

标签: r

随机数据和这两个函数。

data = data.frame(x=c(1,2,3,4,5,5), y=c(1,2,3,4,5,5))

test_fun1 <- function(data, formula){ lm( formula = formula, data = data)  }
test_fun2 <- function(data, formula){ cor.test( formula = formula, data = data) }

lm按预期工作。

test_fun1( data = data, formula= x~y )

但我不能对cor.test做同样的事情。这失败了:

test_fun2(data = data, formula= ~x+y)

直接它可以正常工作:

cor.test( formula = ~x+y, data = data)

从我读到的内容可能会有一些范围问题。 它找不到通过的公式。错误是“错误:类型'闭包的对象'不是子集”但这是因为找不到formula,然后它尝试使用名为formula的函数。

如何让它找到传递的函数?

2 个答案:

答案 0 :(得分:3)

该功能可能存在错误。试试这个解决方法:

test_fun3 <- function(data, formula) { 
  eval.parent(substitute(cor.test( formula = formula, data = data))) 
}

这会将参数替换为test_fun3 in然后在父框架中运行,即test_fun3的调用者。

答案 1 :(得分:1)

另一种解决方案:

test_fun2 <- function(data, formula) { 
     environment(formula) <- environment()
     cor.test(formula = formula, data = data) 
}

test_fun2(data = data, formula= ~x+y)

#         Pearson's product-moment correlation
# 
# data:  x and y
# t = 1.7596, df = 4, p-value = 0.1533
# alternative hypothesis: true correlation is not equal to 0
# 95 percent confidence interval:
#  -0.3255130  0.9583575
# sample estimates:
#       cor 
# 0.6605476