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())
ошибка в n (): Эта функция не должна вызываться напрямую
6 ответов:
Я предполагаю, что у вас есть
dplyr
иplyr
загружается в том же сеансе.dplyr
неplyr
.ddply
не является функцией в .и
dplyr
иplyr
функцииsummarise
/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
столкнулся с аналогичной проблемой при выполнении кода в соответствии с упомянутым блогом, а затем запустите решение в detach ("package:plyr", unload=TRUE)
блог:https://www.analyticsvidhya.com/blog/2017/09/comparative-stock-analysis/
Master_Data_AutoCorrelations<-Master_Data_lags %>% gather(key = "lag", value = "lag_value", -c(Stock,Date, Close)) %>% mutate(lag = str_sub(lag, start = 5) %>% as.numeric) %>% group_by(Stock, lag) %>% summarize( cor = cor(x = Close, y = lag_value, use = "pairwise.complete.obs"), cutoff_upper = 2/(n())^0.5, cutoff_lower = -2/(n())^0.5 )
сообщение работает отсоединить, когда выше код был перезапущен он работал нормально, хотя получил предупреждение, как показано ниже, не уверен, что plyr был выгружен или нет.И как правильно выполняется код ?
предупреждение сообщение: пространство имен 'plyr' не может быть выгружено: plyr пространства имен ‘’ ввозится ‘reshape2’, ‘весы’, ‘метла’, ‘ggplot2’ так не может быть выгружен