簡體   English   中英

R:如何使用“數據” - lm-formula的參數作為字符?

[英]R: How to use “data”-argument of lm-formula as character?

我有一個問題,在度過周末之后,我想尋求幫助。 為了解釋這個問題,我想直接跳到一個例子中:

 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,])

我想回收模型的data-argument:

 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.namef 通過子設置,我遇到了parse問題,因為dat現在是帶括號的字符向量。

作為旁注:我想要從lm -function回收data -argument而不是僅使用與var.name相同的表達式的var.name是我經常更改子設置,並從中識別它lm-object讓我的生活更輕松。 它還會刪除錯誤源。

如果有人能幫助我,我會感激不盡...

你可以像這樣eval這個表達式

foo <- function(model, varname) eval(model$call[["data"]])[,varname]
foo(mod, "f")
##  [1] 2 5 2 5 1 2 1 5 2 3 1 2 3 1 3 4 1 3 4 1 2 3 2 4 1 4 1 2 4 5
## [31] 2 4 2 3 4 2 2 3 4 1 3 1 2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM