2016-03-29 13 views
3

Bazı koşullara bağlı olarak, dplyr :: n ve isteğe bağlı bir işlev kullanmak arasında seçim yapmak zorundayım (örneğin, her türlü argüman verilen 2 değeri döndüren bir işlev olsun).Neden dplyr'ın n() işlevi atanması onu özetlenemez ve mutasyona uğratır?

aşağıdaki yaparsanız: Ben onu olduğu gibi normal bir şekilde çalışmaya bekliyordum iken n new_n atanan alır

new_n <- dplyr::n 
new_n <- ifelse(is.null(k), new_n, my_new_n) 
data <- data %>% group_by_(z) %>% mutate_(n = new_n) 

örneği dplyr için ise :: hatası

Error: This function should not be called directly 

olsun

Yazan Niçin Bu Nedir? Etrafta bir iş var mı? Temel olarak, k'ye bağlı olarak n içindeki değişkene farklı bir değer atamam gerekiyor, fakat mutasyonun proje gereksinimlerine bağlı olarak gerçekleştirildiği kod parçasını değiştiremiyorum.

DÜZENLEME: basit örnek eklendi. Eğer çalıştırmayı denediğinizde Örneğin ,

if (require("nycflights13")) { 
carriers <- group_by(flights, carrier) 
summarise(carriers, n()) 
mutate(carriers, n = n()) 
filter(carriers, n() < 100) 
} 

her şey kod çalışmaz

new_n <- n 
summarise(carriers, new_n()) 

çalıştırmayı denediğinizde ancak eğer iyi çalışır ve siz rağmen yukarıdaki hatayı ne alırsınız Ben sadece yeni_n'ye n atamadım.

+1

nerede 'data' olduğunu kullanmaz? – akrun

+0

@akrun Veri dahil etmedim, ancak sorunumun "farklı sürümü" nü,? N yardım bölümündeki örnekle çalıştırmayı deneyebilirsiniz. New_n <- n 'i tanımlar ve n() yerine new_n() ile örneği çalıştırırsanız, aynı hatayı ve açıklamaya çalıştığım aynı sorunu alırsınız. – mickkk

+0

@akrun Çalışan bir örnek ekledim – mickkk

cevap

3
Eğer n() kullanmak mutate() ile

ama mutate_() ile size ~n()

Yani ya

data %>% group_by(z) %>% mutate(n = n()) 

veya

data %>% group_by_(~z) %>% mutate_(n = ~n()) 
İlgili konular