2016-11-17 29 views
6

Bir çubuk grafiği çizmek için bir işlev yazdım. Ama faset sardığı zaman '~' işareti şeyleri zorlaştırıyor.Bir işlev içinde bir facet_wrap (ggplot2) nasıl yazılır

facet_wrap((get(~feature))) # invalid first argument 
facet_wrap(paste0("~ ", get(feature))) # object 'feature' not found 

Nasıl '~' işareti fonksiyonu ile birlikte sağlıyorsunuz:

rf.funct <- function(dat, predictor, feature){ 
    ggplot(get(dat), aes(get(predictor), N)) + 
    geom_bar(stat = 'identity') + 
    facet_wrap(get(~feature)) # this is where the problem is 
} 

Aşağıdaki denedim?

+0

özelliği bir dizgedir veya? – JasonWang

+1

Kodunuzdan "al" ı kaldırırsanız ne olur? –

+1

'facet_wrap (yapıştır (" ~ ", özellik))). Ve, JakeKaupp'ın dediği gibi, "get" in tüm örneklerinden kurtulun. – eipi10

cevap

6

get'u kullanmanıza gerek yoktur. Veri çerçevesini dat bağımsız değişkenini kullanarak işleve aktardınız, bu yüzden dat ürününü ggplot'a besleyin ve veri verilerini kendi ortamından elde edin.

rf.funct <- function(dat, predictor, feature) { 
    ggplot(dat, aes_string(predictor, "N")) + 
    geom_bar(stat = 'identity') + 
    facet_wrap(feature) 
} 

predictor ve feature argümanlar

dizeleri olarak girilmelidir. Ardından estetiği belirtmek için aes_string'u kullanabilirsiniz. facet_wrap şimdi bir karaktere ihtiyaç duymadan bir formül vektörüne (@WeihuangWong tarafından işaret edildiği gibi) doğrudan sahip olabilir.

+1

ggplot 2.1.0'da, "fasetlerin argümanı" ya bir formül veya karakter vektörü olabilir. Tek yüzlü bir formül, '~ a + b' veya bir karakter vektörü kullanın 'c ("a", "b ")'." Dolayısıyla, OP daha yeni bir ggplot sürümü kullanıyorsa, yapıştır (...) 'gereksiz olabilir. –

+0

get() öğesini kullandım çünkü işlev, ggplot kodunun üstünde bazı data.table kodları içeriyordu. Ggplot bölümü için get() kullanmam gerekmediğini anlıyorum, teşekkür ederim! – ant

+0

Teşekkürler @WeihuangWong. Cevabımı buna göre güncelledim. – eipi10

İlgili konular