Ich habe etwas entlang der Linien vonWie kann ich einen Begriff in einer R-Formel durch zwei ersetzen?
y ~ x + z
Und ich würde es zu transformieren möchte
y ~ x_part1 + x_part2 + z
Allgemeiner würde ich eine Funktion haben wollen, die eine Formel nimmt und diese Formel mit Alle Begriffe, die mit "^ x $" übereinstimmen, werden durch "x_part1" und "x_part2" ersetzt. Hier ist meine aktuelle Lösung, aber es fühlt sich einfach so kludgey ...
my.formula <- fruit ~ apple + banana
var.to.replace <- 'apple'
my.terms <- labels(terms(my.formula))
new.terms <- paste0('(',
paste0(var.to.replace,
c('_part1', '_part2'),
collapse = '+'),
')')
new.formula <- reformulate(termlabels = gsub(pattern = var.to.replace,
replacement = new.terms,
x = my.terms),
response = my.formula[[2]])
Ein weiterer Nachteil ist, dass die Eingangsformel mit Wechselwirkungen festgelegt werden kann.
y ~ b*x + z
ausgeben sollte eine dieser (äquivalent) Formeln
y ~ b*(x_part1 + x_part2) + z
y ~ b + (x_part1 + x_part2) + b:(x_part1 + x_part2) + z
y ~ b + x_part1 + x_part2 + b:x_part1 + b:x_part2 + z
MrFlick die Verwendung von
Ersatz befürwortet (y ~ b * x + z, Liste (x = Zitat (x_part1 + x_part2)))
aber wenn ich die Formel I in einer variablen ändern möchten gespeichert, wie in
my.formula <- fruit ~ x + banana
Dieser Ansatz scheint ein wenig mehr Massieren zu verlangen:
substitute(my.formula, list(x=quote(apple_part1 + apple_part2)))
# my.formula
Die notwendige Änderung dieser Ansatz war:
do.call(what = 'substitute',
args = list(apple, list(x=quote(x_part1 + x_part2))))
Aber ich kann nicht herausfinden, wie dieser Ansatz zu verwenden, wenn beide 'x' und c ('x_part', 'x_part2') werden in Variablen mit Namen gespeichert, z var.to.replace
und new.terms
oben.
Wie können Sie x_part1 aus x machen? – rcorty
Ich habe es mit Zeichen ('einfügen') gemacht und dann' as.formula' angewendet und das an das 'neue' Argument von 'update' übergeben. – rcorty
ah, das Problem mit der Antwort ist, dass, wenn die ursprüngliche Formel Wechselwirkungen hat, ich glaube, sie sind in der neuen Formel verloren. Ich werde die Frage aktualisieren, um dieses Szenario zu verdeutlichen. – rcorty