以下代码运行良好:
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) - 任何帮助表示赞赏。
答案 0 :(得分:0)
我能够找到解决问题的方法。建议阅读dplyr vignettes文档: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")
有两个问题:
该函数不喜欢我使用字母&#34; c&#34;来引用函数变量。不知道为什么,可能是因为它代表了一个载体?
添加&#34; a = as.name(processed.take)&#34;等。似乎纠正了很多问题。没有必要重命名processed.take = a,它可以写成processed.take = as.name(treated.take)。