我昨天发布了a similar question。在阅读和回答答案的过程中,我更好地了解了我想要问的问题。评论中指出我正在“改变问题”,因此我应该发布一个新问题。这是一个新的,经过深思熟虑的问题!
我有以下情况,其中unknown.function
是我正在尝试实施的内容:
my.formula <- fruit ~ apple * banana + carrot + apple
var.to.replace <- 'apple'
new.terms <- paste0('(',
paste0(var.to.replace,
c('_part1', '_part2'),
collapse = '+'),
')')
result <- unknown.function(my.formula, var.to.replace, new.terms)
print(result)
# fruit ~ (apple_part1 + apple_part2) * banana + carrot + (apple_part1 + apple_part2)
MrFlick建议unknown.function
的以下定义,似乎很有希望。
unknown.function <- function(formula,
to.replace,
replace.with) {
replacer <- list(replace.with)
replacer <- setNames(object = replacer, nm = to.replace)
result <- do.call(what = 'substitute',
args = list(formula, replacer))
return(result)
}
但是这个功能的结果只是一点点:
print(result)
# fruit ~ "(apple_part1+apple_part2)" * banana + carrot + "(apple_part1+apple_part2)"
具体而言,新条款使用引号,这似乎妨碍了result
作为典型的R
公式:
all.vars(result)
# "fruit" "banana" "carrot"
理想情况下,'apple_part1'和'apple_part2'会在result
中变量。