客户功能错误与道具.测试和复制



下面的代码运行正常:

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")

有两个问题:

  1. 函数不喜欢我用字母"c"指代函数变量。不知道为什么,可能是因为它代表一个向量?

  2. 增加"a = as.name(treating .take)"等。似乎解决了很多问题。没有必要重命名已处理过的。取= a,可以写成已处理。

最新更新