我有一個問題,花了我的週末後,我想請求幫助。要解釋這個問題,我想直接跳到一個例子:R:如何使用lm-formula的「數據」參數作爲角色?
df <- data.frame(x=rnorm(100), z=rnorm(100), y=rnorm(100), f=rep(1:5,length.out=100))
mod <- lm(y ~ x, data=df[df$z>0,])
我要回收的模型的數據參數:
dat <- mod$call[['data']]
這給了我:
df[df$z > 0, ]
但是,str(dat)
將顯示這是language
類型的對象。然而,我想使用這個表達式來訪問在lm
(包括子設置)中使用的數據幀,以獲得另一個變量的相應值,比如f
。請注意,將語言對象轉換爲帶有as.character()
的字符將導致字符向量,並且一些括號將丟失。
我想用這個函數裏面,我所尋找的是這樣的:
foo <- function(fm, "var.name"){
new <- paste(dat, "$", var.name, sep="")
newvar <- eval(parse(text=new), envir=.GlobalEnv)
... do stuff with newvar ...
}
無子的設定,這個過程讓我變f
如果我指定var.name
爲f
。隨着子設置,我遇到了parse
的問題,因爲dat
現在是一個帶括號的字符向量。
作爲一個側面說明:我爲什麼要回收從lm
- 函數的data
-argument而不是僅僅使用與var.name
同樣表達的原因,是我改變子設定經常,並讓它認可來自lm對象使我的生活變得更容易。它也消除了錯誤的根源。
我將債臺高築,如果有人可以幫助我在這裏...
你看着'deparse()'? –
'mod $ model'呢?它會有'x'和'y',夠了嗎? – flodel
本,非常感謝!我實際上在代碼的另一部分中使用了deparse。尷尬,我沒有想到這一點。非常感謝! – coffeinjunky