我有一个公式,其中包含一些项和一个数据框(早期model.frame()
调用的输出),该数据框包含所有这些术语以及更多。 我想要仅包含出现在公式中的变量的模型框架的子集。
ff <- log(Reaction) ~ log(1+Days) + x + y
fr <- data.frame(`log(Reaction)`=1:4,
`log(1+Days)`=1:4,
x=1:4,
y=1:4,
z=1:4,
check.names=FALSE)
期望的结果是减去 z
列的 fr
(fr[,1:4]
是欺骗行为——我需要一个编程解决方案...)
以下策略不起作用:
fr[all.vars(ff)]
## Error in `[.data.frame`(fr, all.vars(ff)) : undefined columns selected
(因为all.vars()
得到的是"Reaction"
,而不是log("Reaction")
)
stripwhite <- function(x) gsub("(^ +| +$)","",x)
vars <- stripwhite(unlist(strsplit(as.character(ff)[-1],"\\+")))
fr[vars]
## Error in `[.data.frame`(fr, vars) : undefined columns selected
(因为在+
上分割会错误地分割log(1+Days)
这个术语)。
我一直在考虑遍历该公式的解析树:
ff[[3]] ## log(1 + Days) + x + y
ff[[3]][[1]] ## `+`
ff[[3]][[2]] ## log(1 + Days) + x
但我没有构建出一个解决方案,而且似乎我正在陷入一个兔子洞。有什么想法吗?
log(1+Days)
。您必须这样调用它吗?还是可以使用其他名称? - Thomasattr(terms.formula(ff), "term.labels")
是什么意思? - Roman Luštrikmodel.frame()
中的内容都必须处理。这就是问题的一部分。 - Ben Bolkerrownames(attr(terms.formula(ff), "factors"))
也可以获取到因变量。 - Thomas