2017-11-07 3 views
1

Ich habe eine Frage zur Formel Änderung in R.Ersetzen einer Zeichenfolge in einer R-Formel

Lets sagen, dass ich eine Formel habe.

> fo <- a ~ b + c 

kann ich ersetzen einen Begriff substitute_q

> pryr::substitute_q(fo, list(a = 'happy')) 
"happy" ~ b + c 

mit out Wenn ich einen Begriff in ohne Anführungszeichen ersetzen will, muss ich es in als Name Jetzt ersetzen kann

> pryr::substitute_q(fo, list(a = as.name('happy'))) 
happy ~ b + c 

Lassen Sie uns jedoch sagen, dass ich eine Formel mit einer Zeichenfolge habe.

> fo <- 'a' ~ b + c 
> fo 
"a" ~ b + c 

Ich kann keinen Weg finden, die Zeichenfolge aus der Formel zu ersetzen.

> pryr::substitute_q(fo, list(a = as.name('happy'))) 
"a" ~ b + c 
> pryr::substitute_q(fo, list("a" = as.name('happy'))) 
"a" ~ b + c 
> pryr::substitute_q(fo, list(`"a"` = as.name('happy'))) 
"a" ~ b + c 
> pryr::substitute_q(fo, list('"a"' = as.name('happy'))) 
"a" ~ b + c 

Ich denke, das liegt daran, dass substitute_q für Variablen innerhalb einer Umgebung aussieht, wenn Ersetzungen durchgeführt wird, was bedeutet, dass es immer Namen in der Formel zu ersetzen versucht. Gibt es eine Möglichkeit, das Zeichen "a" zu ersetzen?

+0

@ d.b So funktioniert dies für den speziellen Fall dargestellt. Für einen komplizierteren wie: 'func1 (a, b) ~ func2 (" e ", 10) + b * c + func3 (d)' Ich finde 'reformulate' fehlt. Kann es für einen komplizierten Fall wie diesen angepasst werden? –

Antwort

0

In Basis R verwenden deparse Formel-Zeichen umgewandelt werden, die notwendige Substitution durchzuführen, und zwingt zurück zur Formel

fo <- 'a' ~ b + c 
as.formula(gsub("\"a\"", "\"happy\"", deparse(fo))) 
#"happy" ~ b + c 

fo2 = func1(a, b) ~ func2("e", 10) + b * c + func3(d) 
as.formula(gsub("func2(\"e\", 10)", "func2(HAN, SOLO)", deparse(fo2), fixed = TRUE)) 
#func1(a, b) ~ func2(HAN, SOLO) + b * c + func3(d) 
Verwandte Themen