2016-08-29 1 views
1

Ich verwende das Paket rethinking, das über die Funktionen map() und map2stan() eine Bayessche Schätzung durchführen kann (letztere als Schnittstelle zu rstan). map() und map2stan() nehmen eine alist() von Formeln die Wahrscheinlichkeit und priors, wie zu definieren:Wie kann ich eine Zeichenfolge in eine Alist() in R teilen?

alist(
    height ~ dnorm(mu, sigma), 
    mu ~ dnorm(178, 20), 
    sigma ~ dunif(0, 50) 
) 

die druckt als:

[[1]] 
height ~ dnorm(mu, sigma) 

[[2]] 
mu ~ dnorm(178, 20) 

[[3]] 
sigma ~ dunif(0, 50) 

Ich versuche, die Auswirkungen von priors zu erforschen, so will ich verschiedene Sätze von Mitteln und Standardabweichungen passieren zu können. Ich kann den priors in ein Semikolon getrennten Zeichenfolge wie erhalten:

s <- "height ~ dnorm(mu, sigma); mu ~ dnorm(178, 20); sigma ~ dunif(0, 50)" 

von denen ich glaube, ich soll zu einem alist() auf ; und weisen aufteilen können. Aber ich kann diesen letzten Schritt nicht herausfinden.

Ich habe versucht, Variationen:

do.call("alist", unlist(strsplit(s,";"))) 

und

as.vector(unlist(strsplit(s,";")), mode = "alist") 

Erstere nicht mit second argument must be a list und letztere, weil as.vector() keine "alist" -Modus haben.

Vielleicht ist die allgemeinere Frage: Wie kann ich eine Zeichenfolge in eine alist() bekommen? Ich habe die Antwort in this question gelesen, aber ich kann nicht herausfinden, wie man es für dieses spezielle Problem anpasst.

Antwort

2

Dies wird die Arbeit machen:

lapply(strsplit(s, ";")[[1]], function(x) parse(text = x)[[1]]) 
2

alist gibt nur eine Liste zurück, so dass Sie in der Lage sein sollten, nur eine Liste von Formeln zu erstellen.

library(magrittr) 
s %>% 
    strsplit("; ", fixed = TRUE) %>% 
    extract2(1) %>% 
    lapply(as.formula) 
+0

Diese perfekt für einfache Formeln arbeitet, was zugegebenermaßen, was mein Beispiel ist. Kompliziertere mit mehr Termen wie 'mu <- a [block] + bHeight * height 'scheitern, weil sie versuchen, den Ausdruck auszuwerten. 'Fehler in eval (expr, envir, enclos): Objekt 'a' nicht gefunden '. Irgendwelche Gedanken darüber, wie man das schafft? – kmm

+3

@kmm - Wenn Sie eine Menge Ausdrücke als Zeichenfolgen haben, haben Sie größere Fische zum Frittieren. –

Verwandte Themen