2011-12-20 32 views
14

Ben Şimdi kullanıcı bu argümanları belirtmemiş durumunda arsa için bazı varsayılan sağlamak istiyorum bir fonksiyonukaçının argüman çoğaltılması (...)

somefun <- function(someparameters , ...) { plot(stuff, ...)} 

var. (ör. xlab="").

Bir dizi varsayılan çizim seçeneklerini nasıl sağlayabilirim, ancak yine de kullanıcının bu bağımsız değişkenleri geçersiz kılmasına izin verir misiniz? Aynı argüman iki kere girildiği için, R şu hatayı atar: çoklu argümanlarla eşleştirilen resmi argüman.

benim işlevi

somefun <- function(someparameters, main, xlab, ylab, xlim....) 

üzerinden tüm bu seçenekler üzerinde geçebilir ama yerine bunu yapmazdım farkındayım.

Bunu başarmak için kolay ve basit bir çözüm var mı? aşağıdaki gibi

+0

için 'somefun <- fonksiyonu (someparamenters, ana, xlab = "", ...) {arsa (malzeme, xlab, ...)} '? Tam olarak istediğin şey olduğunu düşünürdüm. – Henry

+0

Temiz değil. gereksiz gibi görünüyor ve bu kodu bir paket içine koyduğumda bu belgenin içinde görünen parametreler görünecektir. – LostLin

+1

Kullanıcılarınızın bu parametreleri belgelerde olmasını isteyeceğimi ve Henry'nin önerisinin tercih edilmesini sağladım. – Aaron

cevap

19

modifyList kullanılan deneyin: sizin itiraz nedir

f <- function(x, ...) { 
    defaults <- list(xlab = "x", ylab = "y") 
    args <- modifyList(defaults, list(x = x, ...)) 
    do.call("plot", args) 
} 
+0

Cevabınız için teşekkür ederim. Ancak şimdi bir parametre olarak hareket etmek için listeyi nasıl alabilirim? 'arsa (1,2, args) 'bu durumda kesinlikle çalışmaz – LostLin

+1

@Ellipsis Bu' do.call 'sihri: argümanları bir liste olarak alır. Ayrıca bkz: 'do.call'. ModifyList için +1, bunu bilmiyordum. Bu kadar düzgün olmayan "match.call()" sonucuyla çalışmış olurdum. –

+1

@Ellipsis, 'arsa' örneği vermek için değiştirdim. –

İlgili konular