2012-02-03 13 views
32

chcę napisać trochę funkcję generowania próbek z odpowiednimi rozkładami, coś jak:Przekazywanie listy nazwanych parametrów do funkcji?

makeSample <- function(n,dist,params) 
values <- makeSample(100,"unif",list(min=0,max=10)) 
values <- makeSample(100,"norm",list(mean=0,sd=1)) 

Większość kodu działa, ale mam problemy zastanawianie się, jak przekazać nazwanych parametrów dla każdej dystrybucji. Na przykład:

params <- list(min=0, max=1) 
runif(n=100,min=0,max=1) # works 
do.call(runif,list(n=100,min=0,max=1)) # works 
do.call(runif,list(n=100,params)) # doesn't work 

Zgaduję, że brakuje mi jakiejś funkcji owijki, ale nie mogę tego rozgryźć.

Dzięki!

Odpowiedz

45

Prawie tam: spróbuj

do.call(runif,c(list(n=100),params)) 

Twój wariant, list(n=100,params) sprawia listę gdzie Drugim elementem jest lista parametrów. Użyj str() porównać strukturę list(n=100,params) i c(list(n=100),params) ...

1

c(...) ma działanie złączenie lub FP w żargonie, efekt spłaszczenia, więc można skrócić rozmowę; Twój kod byłoby:

params <- list(min=0, max=1) 
do.call(runif, c(n=100, params)) 

Spróbuj następujące porównania:

params = list(min=0, max=1) 
str(c(n=100, min=0, max=1)) 
str(list(n=100, min=0, max=1)) 
str(c(list(n=100),params)) 
str(c(n=100,params)) 

wygląda jeśli lista jest tam w dowolnym momencie, wynik jest lista (co jest cechą pożądaną w tym zastosowaniu obudowa)

Powiązane problemy