【发布时间】:2020-11-20 17:00:10
【问题描述】:
给定:
vars <- c("var1", "var2", "var3", "var4")
mm_exp <- expression(
f(testm, testmodel = 'test', testgraph = g, truetest1 = TRUE, truetest2 = TRUE),
f(testm2, testmodel = 'fg'),
f(testm3, testmodel = 'fg3')
)
我想使用mm_exp 和vars 的所有组合(combn)生成formulas 以输入模型:
#y ~ var1 + var2 + var3 + var4 + f(testm, testmodel = "test", testgraph = g, truetest1 = TRUE,
# truetest2 = TRUE) + f(testm2, testmodel = "fg") + f(testm3, testmodel = 'fg3')
#y ~ var1 + var2 + var3 + f(testm, testmodel = "test", testgraph = g, truetest1 = TRUE,
# truetest2 = TRUE) + f(testm2, testmodel = "fg") + f(testm3, testmodel = 'fg3')
#y ~ var1 + var2 + f(testm, testmodel = "test", testgraph = g, truetest1 = TRUE,
# truetest2 = TRUE) + f(testm2, testmodel = "fg") + f(testm3, testmodel = 'fg3')
#y ~ var1 + var4 + f(testm, testmodel = "test", testgraph = g, truetest1 = TRUE,
# truetest2 = TRUE) + f(testm2, testmodel = "fg") + f(testm3, testmodel = 'fg3')
#etc.....
如果我简化mm_exp,我可以得到类似于我想要使用reformulate 的东西(暂时忽略combn):
mm_exp_simplify <- expression(
f(testm, testmodel = 'test', testgraph = g),
f(testm2, testmodel = 'fg'),
f(testm3, testmodel = 'fg3')
)
reformulate(c(vars, sapply(mm_exp_simplify, deparse)), "y")
# y ~ var1 + var2 + var3 + var4 + f(testm, testmodel = "test",
# testgraph = g) + f(testm2, testmodel = "fg") + f(testm3,
# testmodel = "fg3")
但如果我重新添加 truetest1 = TRUE, truetest2 = TRUE 会导致问题:
mm_exp <- expression(
f(testm, testmodel = 'test', testgraph = g, truetest1 = TRUE, truetest2 = TRUE),
f(testm2, testmodel = 'fg'),
f(testm3, testmodel = 'fg3')
)
reformulate(c(vars, sapply(mm_exp, deparse)), "y")
# Error in reformulate(c(vars, sapply(mm_exp, deparse)), "y") :
# 'termlabels' must be a character vector of length at least one
我也尝试过使用quote,但遇到了类似的问题:
mm_quote <- quote(
f(testm, testmodel = 'test', testgraph = g, truetest1 = TRUE, truetest2 = TRUE) +
f(testm2, testmodel = 'fg') + f(testm3, testmodel = 'fg3')
)
as.formula(paste0("y ~ ", paste(paste(vars, collapse = "+"), deparse(mm_quote), sep = "+")))
# Error in parse(text = x, keep.source = FALSE) :
# <text>:2:39: unexpected '='
# 1: y ~ var1+var2+var3+var4+f(testm, testmodel = "test", testgraph = g, truetest1 = TRUE,
# 2: y ~ var1+var2+var3+var4+ truetest2 =
# ^
有人对如何包含truetest1 = TRUE, truetest2 = TRUE 以及如何获取combn 版本的公式有建议吗?
谢谢
【问题讨论】:
标签: r string formula eval paste