下面的代码运行正常:
library(dplyr)
library(lazyeval)
datatable <- data.frame(f= c("Group1","Group2")
,a = c(100,200)
,b = c(400,500)
,c = c(50000,35000)
,d = c(99000,70000))
datatable %>%
group_by(f) %>%
mutate(p = prop.test(x=c(a, b)
,n=c(c, d)
,alternative = c("two.sided")
,correct = FALSE)$p.value)
但是,当放入函数中时,代码会出错:
functionx <- function(datatable, f, a, b, c, d)
{
Table <- datatable %>%
group_by_(f) %>%
mutate_(p = interp(~prop.test(x=c(a, b)
,n=c(c, d)
,alternative = c("two.sided")
,correct = FALSE)$p.value))
}
我收到的错误如下:
错误:二进制操作符
的非数字参数
我试过用几种不同的方式写函数(例如a=as.name(a))。我是编写函数的新手(特别是NSE/SE) -感谢任何帮助。
我终于找到了解决问题的办法。建议通读dplyr小插图文档:https://cran.r-project.org/web/packages/dplyr/vignettes/nse.html
functionx <- function(datatable, facet.var, treated.take, holdout.take, treated.pop, holdout.pop)
{
datatable %>%
group_by_(facet.var) %>%
mutate_(p = interp(~prop.test(x=c(a, b)
,n=c(d, e)
,alternative = c("two.sided")
,correct = FALSE)$p.value
,a = as.name(treated.take)
,b = as.name(holdout.take)
,d = as.name(treated.pop)
,e = as.name(holdout.pop))
)
}
datatablex <- data.frame(facet.varx= c("Group1","Group2")
,treated.takex = c(100,200)
,holdout.takex = c(400,500)
,treated.popx = c(50000,35000)
,holdout.popx = c(99000,70000))
functionx(datatablex, "facet.varx", "treated.takex", "holdout.takex", "treated.popx", "holdout.popx")
有两个问题:
函数不喜欢我用字母"c"指代函数变量。不知道为什么,可能是因为它代表一个向量?
增加"a = as.name(treating .take)"等。似乎解决了很多问题。没有必要重命名已处理过的。取= a,可以写成已处理。