随机数据和这两个函数。
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
的函数。
如何让它找到传递的函数?
答案 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