簡體   English   中英

R中的變量名稱向量

[英]vector of variable names in R

我想創建一個自動生成單變量和多變量回歸分析的函數,但我無法弄清楚如何在向量中指定**變量... **這看起來很簡單,但略讀文檔我到目前為止還沒弄明白......

簡單的例子

a<-rnorm(100)
b<-rnorm(100)
k<-c("a","b")
d<-c(a,b)
summary(k[1])

但是k [1] =“a”並且是一個字符向量... d只是b附加到a,而不是變量名。 實際上,我希望k [1]代表向量a。

感謝任何答案......

//中號

您可以使用“get”函數根據其名稱的字符串獲取對象,但從長遠來看,最好將變量存儲在列表中並以這種方式訪問​​它們,事情變得更加簡單,您可以抓取子集,您可以使用lapply或sapply在每個元素上運行相同的代碼。 保存或刪除時,您可以只處理整個列表,而不是嘗試記住每個元素。 例如:

mylist <- list(a=rnorm(100), b=rnorm(100) )
names(mylist)
summary(mylist[[1]])
# or
summary(mylist[['a']])
# or
summary(mylist$a)
# or 
d <- 'a'
summary(mylist[[d]])

# or
lapply( mylist, summary )

如果您以編程方式創建用於使用lm(或其他建模函數)進行分析的模型,那么一種方法是僅對您的數據進行子集化並使用“。”,例如:

yvar <- 'Sepal.Width'
xvars <- c('Petal.Width','Sepal.Length')
fit <- lm( Sepal.Width ~ ., data=iris[, c(yvar,xvars)] )

或者您可以使用“paste”或“sprintf”構建公式,然后使用“as.formula”將其轉換為公式,例如:

yvar <- 'Sepal.Width'
xvars <- c('Petal.Width','Sepal.Length')
my.formula <- paste( yvar, '~', paste( xvars, collapse=' + ' ) )
my.formula <- as.formula(my.formula)
fit <- lm( my.formula, data=iris )

如果您正在查看自動適合的許多不同模型,請注意多重比較的問題。

你可以使用列表k=list(a,b) 這將創建一個包含組件a和b的列表,但不是變量名列表。

get()正是您要找的:

summary(get(k[1]))

編輯:get()不是你要找的,它是list()。 get()也可能有用。

如果您正在尋找自動生成回歸分析,您實際上可能會受益於使用eval(),盡管每個R程序員都會警告您使用eval(),除非您非常清楚自己在做什么。 在使用它們之前,請仔細閱讀有關eval()和parse()的幫助文件。

一個例子 :

d <- data.frame(
  var1 = rnorm(1000),
  var2 = rpois(1000,4),
  var3 = sample(letters[1:3],1000,replace=T)
)

vars <- names(d)

auto.lm <- function(d,dep,indep){
      expr <- paste(
          "out <- lm(",
          dep,
          "~",
          paste(indep,collapse="*"),
          ",data=d)"
      )
      eval(parse(text=expr))
      return(out)
}

auto.lm(d,vars[1],vars[2:3])

暫無
暫無

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

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