dplyr:“不应该直接调用n():函数中的错误”
我试图重现dplyr包中的一个例子,但是这个错误信息。 我期待看到每个组合的频率产生一个新的列n。 有人能告诉我我失踪了吗? 我三重检查,包被加载。 感谢您的帮助,一如既往。
library(dplyr) # summarise peels off a single layer of grouping by_vs_am <- group_by(mtcars, vs, am) by_vs <- summarise(by_vs_am, n = n()) #Error in n() : This function should not be called directly
我认为你在同一个会话中加载了dplyr
和plyr
。 dplyr
不是plyr
。 ddply
不是dplyr
包中的一个函数。
dplyr
和plyr
都有functionsummarise
/ summarize
。
看看conflicts()
的结果来查看被蒙版的对象。
正如前面的回答所述,plyr和dplyr之间可能会有冲突。 你可以运行这个命令来卸载plyr软件包。
detach("package:plyr", unload=TRUE)
那么你可以按预期继续。
library(dplyr) ... summarise(n = n())
为了避免混淆掩码函数,使用“package :: function”规范很明显,如下例所示:
delay <- dplyr::summarise(by_tailnum, count = n(), dist = mean(distance, na.rm = TRUE), delay = mean(arr_delay, na.rm = TRUE))
在另一种情况下,在下面的代码中发生此错误。
library(dplyr) # dplyr 0.5.0 library(lazyeval) df <- data_frame(group = c(1, 2, 2, 3, 3, 3)) g <- "group" df %>% group_by_(g) %>% summarise_( n = n(), sum = interp(~sum(col, na.rm = TRUE), col = as.name(g)) ) # Error in n() : This function should not be called directly
它可以解决如下。
df %>% group_by_(g) %>% summarise_( n = "n()", sum = interp(~sum(col, na.rm = TRUE), col = as.name(g)) ) # A tibble: 3 × 3 # group n sum # <dbl> <int> <dbl> # 1 1 1 1 # 2 2 2 4 # 3 3 3 9