2016-08-02 8 views
2

Ich möchte gleichzeitig Vektoren verschiedener Parameterwerte in rbeta verwenden und einen Vektor herausholen, dessen Länge die Summe der Elemente des n-Vektors ist. Zum BeispielVektor von verschiedenen n-Werten in rbeta

n <- c(10, 20, 30) 
alpha <- c(1,2,3) 
beta <- c(3,2,1) 
rbeta(n, alpha, beta) 

Das Endergebnis tut nicht, was ich möchte. Ich möchte, dass die Ausgabe ein Vektor der Länge 10 + 20 + 30 = 60 ist, wobei die ersten 10 Elemente 10 Stichproben von einem Beta (1,3) sind, die nächsten 20 Elemente von einem Beta (2,2) und dem nächsten 30 Elemente aus einer Beta (3,1). Was ist der beste Weg, dies zu tun?

+2

'rbeta (Summe (n), 2, 1)' .....? – joran

Antwort

2

Im Allgemeinen, wenn eine Funktion auf die Elemente eines Vektors anwenden, würden Sie auf lapply über dem Eingangsvektor benötigen:

unlist(lapply(n, rbeta, 2, 1) 

aber in Ihrem Fall können Sie einfach sum alle n s:

rbeta(sum(n), 2, 1) 

Wenn Sie mehrere Parameter für alpha und beta haben, können Sie Map stattdessen verwenden können (Vorsicht, werden die Argumente umgekehrt im Vergleich zu lapply):

unlist(Map(rbeta, n, alpha, beta)) 
+0

Danke dafür, aber ich erkannte, dass meine Frage nicht detailliert genug war, also habe ich sie bearbeitet. In meinem Fall werde ich tatsächlich verschiedene Werte von Alpha und Beta wollen, so dass ich nicht einfach den n Vektor summieren kann. –

+0

@SarahK In diesem Fall ist 'lapply' oder seine Schwester' mapply' dein Freund. –

+1

Sie müssen auch auf 'Mapply's' SIMPLIFY' Parameter achten, wenn Sie einen Vektor mit gleichen 'n' Werten haben ... –

1

Für Ihre überarbeitete Frage denke ich, vernünftige Nutzung rep() wird es funktioniert.

n <- c(10, 20, 30) 
alpha <- c(1,2,3) 
beta <- c(3,2,1) 
rbeta(sum(n),rep(alpha,n),rep(beta,n))