dplyr: "Error in n (): function tidak boleh dipanggil secara langsung"


96

Saya mencoba mereproduksi salah satu contoh dalam paket dplyr tetapi saya mendapatkan pesan kesalahan ini. Saya mengharapkan untuk melihat kolom baru n diproduksi dengan frekuensi setiap kombinasi. Apa yang saya lewatkan? Saya memeriksa tiga kali bahwa paket sudah dimuat.

 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())

Kesalahan di n (): Fungsi ini tidak boleh dipanggil secara langsung

Jawaban:


120

Saya kira Anda telah dplyrdan plyrdimuat dalam sesi yang sama. dplyrtidak plyr. ddplybukan merupakan fungsi dalam dplyrpaket.

Keduanya dplyrdan plyrmemiliki fungsi summarise/ summarize.

Lihat hasil conflicts()untuk melihat objek bertopeng.


31
Solusinya adalah memastikan Anda memuat plyrterlebih dahulu
hadley

16
Seperti yang dikatakan @ User1257894, gunakan summarizedengan paket, seperti ini dplyr::summarize(count = n()).
Rafa Barragan

39

Seperti yang disebutkan dalam jawaban sebelumnya, Anda mungkin mengalami konflik antara plyr dan dplyr. Anda dapat menjalankan perintah ini untuk membongkar paket plyr.

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

Kemudian Anda dapat melanjutkan seperti yang diharapkan.

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

Persis ... konfliknya antara meringkas atau meringkas. Saya juga tidak sengaja memuat plyrdan dplyrmemaketkan salah satu proyek saya dan menyadari konflik ini. teman kerja yang baik.
Manoj Kumar

26

Untuk menghindari kebingungan dengan fungsi masking, jelas menggunakan spesifikasi "package :: function", seperti contoh di bawah ini:

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

8

Dalam kasus lain, kesalahan ini terjadi pada kode berikut.

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

Itu bisa diselesaikan sebagai berikut.

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

Menghadapi masalah serupa saat menjalankan kode sesuai blog yang disebutkan dan kemudian menjalankan solusi di detach ("package: plyr", unload = TRUE)

Blog: 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
  )

Post running detach, ketika kode di atas dijalankan kembali, itu berfungsi dengan baik meskipun menerima pesan peringatan seperti di bawah ini, tidak yakin apakah plyr dibongkar atau tidak. Dan bagaimana kode dijalankan dengan benar?

Pesan peringatan: namespace 'plyr' tidak dapat dibongkar: namespace 'plyr' diimpor oleh 'reshape2', 'scale', 'broom', 'ggplot2' jadi tidak dapat dibongkar


0

Bagi saya solusinya adalah detach()fungsi saya menggunakan paket fungsi itu


Dapatkah Anda menjelaskan apa yang Anda maksud dengan "Saya menggunakan paket fungsi itu"?
Pengecut tanpa nama

1
maaf saya menggunakan fungsi detach () untuk down a package, saya mengalami konflik antara paket dplyr dan knitr kemudian menggunakan fungsi untuk down package detach ("package: knitr", unload = TRUE)
camilo lopez
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.