prop.test和dplyr的客户功能错误
以下代码运行良好:prop.test和dplyr的客户功能错误,r,dplyr,R,Dplyr,以下代码运行良好: 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) %&g
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)
库(dplyr)
图书馆(懒汉)
数据表%
按(f)分组%>%
变异(p=prop.test)(x=c(a,b)
,n=c(c,d)
,备选方案=c(“双面”)
,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))
}
functionx%
突变(p=interp(~prop.test)(x=c(a,b)
,n=c(c,d)
,备选方案=c(“双面”)
,correct=FALSE)$p.value)
}
我收到的错误如下所示:
错误:二进制运算符的非数值参数
我尝试过用几种不同的方法编写函数(例如a=as.name(a))。我不熟悉编写函数(特别是NSE/SE)——非常感谢您的帮助。我能够找到问题的解决方案。建议阅读dplyr vignettes文档:
functionx%
分组依据(facet.var)%>%
突变(p=interp(~prop.test)(x=c(a,b)
,n=c(d,e)
,备选方案=c(“双面”)
,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为您做什么?来自图书馆(lazyeval)。dplyr使用非标准评估(NSE),我认为函数需要标准评估(SE)。interp将NSE转换为SE,我相信-看到了吗?嗯,我以前从未遇到过这种情况,你能发布一个示例数据帧吗?请提供示例输入,以便我们可以看到你传递给函数的内容并重新创建错误。另外,显式列出您导入的所有包。您编写了“dplyr使用NSE”,但在您的函数定义中,您实际上使用的是group_by和mutate的SE版本。例如,如果f
是datatable
中一列的名称,那么groupby(“f”)
应该用于分组。
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")