我有一個公式,其中包含一些條款和一個數據框(以前的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)
期望的結果是fr
減去z
柱(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)'。你必須這麼稱呼嗎?或者你可以用一個不同的名字嗎? – Thomas
attr(terms.formula(ff),「term.labels」)'? –
我試圖想出一個通用的解決方案。因此,任何可能出現在模型中的東西。必須處理由法定公式生成的frame()'。這是問題的一部分。 –