[r] 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 () 오류 :이 함수는 직접 호출하면 안됩니다.



답변

나는 당신이 같은 세션에 dplyr있고 plyr로드 했다고 가정합니다 . dplyr이 아닙니다 plyr. 패키지 ddply의 기능이 아닙니다 dplyr.

모두 dplyrplyr기능을 가지고 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’, ‘scales’, ‘broom’, ‘ggplot2’에서 가져 왔으므로 언로드 할 수 없습니다.


답변

저에게 해결책은 detach()기능 이었습니다.


답변