为什么分配dplyr的n()函数使得它在汇总和变异中是不可执行的?

时间:2016-03-29 12:39:39

标签: r dplyr

根据某些条件,我必须在使用dplyr :: n和任意函数之间做出选择(例如,一个函数返回2给出的任何参数)。

如果我执行以下操作:

new_n <- dplyr::n
new_n <- ifelse(is.null(k), new_n, my_new_n)
data <- data %>% group_by_(z) %>% mutate_(n = new_n)

例如,如果将dplyr :: n分配给new_n,我会收到错误

Error: This function should not be called directly 

虽然我期待它正常工作,就像我写的那样

data <- data %>% group_by_(z) %>% mutate_(n = n())

为什么会这样?有工作吗?基本上我需要根据k为数据中的变量n分配不同的值,但由于项目要求,我无法更改执行mutate的代码部分。

编辑:添加简单的例子。 例如,如果您尝试运行

if (require("nycflights13")) {
carriers <- group_by(flights, carrier)
summarise(carriers, n())
mutate(carriers, n = n())
filter(carriers, n() < 100)
}

一切正常,但是如果你试图运行

new_n <- n
summarise(carriers, new_n())

代码不起作用,即使我所做的只是将n分配给new_n,你也会得到上面的错误。

1 个答案:

答案 0 :(得分:3)

使用data,您使用mutate()n()使用mutate_()

所以要么使用

~n()

data %>% group_by(z) %>% mutate(n = n())