dplyr :“n () 오류 : 함수를 직접 호출하면 안됩니다.”


96

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

답변:


120

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

모두 dplyrplyr기능을 가지고 summarise/ summarize.

conflicts()마스킹 된 오브젝트를 보려면 의 결과 를보십시오.


31
이 솔루션은 당신이로드하는 것입니다 plyr첫째
해들리

16
@ User1257894가 말했듯 summarize이 패키지와 함께 사용 하십시오 dplyr::summarize(count = n()).
Rafa Barragan

39

이전 답변에서 언급했듯이 plyr와 dplyr간에 충돌이있을 수 있습니다. 이 명령을 실행하여 plyr 패키지를 언로드 할 수 있습니다.

detach("package:plyr", unload=TRUE) 

그런 다음 예상대로 계속할 수 있습니다.

library(dplyr) 
...
summarise(n = n()) 

정확히 ... 갈등은 요약과 요약 사이였습니다. 또한 실수로로드 plyrdplyr패키지 내 프로젝트 중 하나에이 충돌을 깨달았다. 좋은 직장 동료.
Manoj Kumar

26

마스킹 함수와의 혼동을 피하기 위해 아래 예와 같이 "package :: function"사양을 사용하는 것이 분명합니다.

delay <- dplyr::summarise(by_tailnum, 
  count = n(), 
  dist = mean(distance, na.rm = TRUE), 
  delay = mean(arr_delay, na.rm = TRUE))

8

다른 경우에는이 오류가 다음 코드에서 발생했습니다.

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

0

언급 된 블로그에 따라 코드를 실행하는 동안 유사한 문제에 직면 한 다음 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'에서 가져 왔으므로 언로드 할 수 없습니다.


0

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


"내가 그 기능을 다운 패키지로 활용했다"는 의미를 명확히 할 수 있습니까?
익명의 겁쟁이

1
미안 해요 함수의 분리를 () 패키지 다운을위한 패키지 dplyr 다음 패키지 아래로 분리하기위한 기능을 사용 knitr 사이에, 나는 충돌을했다 사용 (= TRUE "패키지 knitr", 언로드)
camilo lopez
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.