私はの線に沿って何かを持っています
y ~ x + z
そして、私はそれをに変換したいと思います
y ~ x_part1 + x_part2 + z
より一般的には、数式を受け取り、「^x$」に一致するすべての用語を「x_part1」と「x_part2」に置き換えてその数式を返す関数が必要です。これが私の現在の解決策ですが、とても面倒に感じます...
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]])
追加の警告は、入力式が相互作用で指定される可能性があることです。
y ~ b*x + z
これらの(同等の)式のいずれかを出力する必要があります
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 は、
代替(y〜b * x + z、リスト(x =引用(x_part1 + x_part2)))
しかし、次のように変数に変更したい数式を保存したら、
my.formula <- fruit ~ x + banana
このアプローチには、もう少しマッサージが必要なようです。
substitute(my.formula, list(x=quote(apple_part1 + apple_part2)))
# my.formula
そのアプローチに必要な変更は次のとおりです。
do.call(what = 'substitute',
args = list(apple, list(x=quote(x_part1 + x_part2))))
しかし、 'x' と c('x_part', 'x_part2') の両方が名前付きの変数に格納されている場合、このアプローチを使用する方法がわかりませvar.to.replace
んnew.terms
。