我想创建一个自动生成单变量和多变量回归分析的函数,但我无法弄清楚如何在向量中指定**变量... **这看起来非常简单,但是略读到目前为止我还没弄明白的文件......
简单的例子
a<-rnorm(100)
b<-rnorm(100)
k<-c("a","b")
d<-c(a,b)
summary(k[1])
但是k [1] =“a”并且是一个字符向量... d只是附加到a,而不是变量名。实际上,我希望k [1]代表向量a。
感谢任何答案......
//中号
答案 0 :(得分:10)
您可以使用“get”函数根据其名称的字符串获取对象,但从长远来看,最好将变量存储在列表中并以这种方式访问它们,事情变得更加简单,你可以抓取子集,你可以使用lapply或sapply在每个元素上运行相同的代码。保存或删除时,您可以只处理整个列表,而不是尝试记住每个元素。 e.g:
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 )
如果您正在查看许多不同的模型,请注意多重比较的问题。
答案 1 :(得分:3)
您可以使用列表k=list(a,b)
。这将创建一个包含组件a和b的列表,但不是变量名列表。
答案 2 :(得分:2)
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])