R

时间:2017-11-22 14:59:09

标签: r loops variables iteration

假设我想创建n个随机变量,然后创建n-1模型,回归每个变量。我可以这样做:

x1 <- rnorm(1000, 0, 1)
x2 <- rnorm(1000, 0, 1)
x3 <- rnorm(1000, 0, 1)
x4 <- rnorm(1000, 0, 1)
x5 <- rnorm(1000, 0, 1)
x6 <- rnorm(1000, 0, 1)
x7 <- rnorm(1000, 0, 1)
x8 <- rnorm(1000, 0, 1)
y <- rnorm(1000, 0, 1)

model1 <- lm(y ~ x1)
model2 <- lm(y ~ x2)
model3 <- lm(y ~ x3)
model4 <- lm(y ~ x4)
model5 <- lm(y ~ x5)
model6 <- lm(y ~ x6)
model7 <- lm(y ~ x7)
model8 <- lm(y ~ x8)

summary model1

等等。显然,这很笨重,需要大量的簿记,并打开大门,以解决错别字的重大错误。

我认为有一种更简单的方法可以做到这一点没有那么多的错误空间?

编辑:解决评论我为缺乏明确性而道歉。这里的细节和数据生成过程对我来说并不是特别重要。我刚刚收录了玩具数据,因为我注意到人们在有问题时通常会包含玩具数据,我认为这是惯例。

我真正想要的是攻击此排序问题的过程。在我的工作中,拥有大型数据集并希望生成大量模型来比较不同的变量对是很平常的。我一直在使用上面描述的过程,我手工写出每个模型,或者在excel中进行某种命令串联,然后剪切粘贴。它只会产生非常低效的代码,而且我认为是一种更简洁的方法来处理这个问题,因为这似乎是人们经常需要做的事情。

3 个答案:

答案 0 :(得分:1)

使用replicate在每个样本上绘制样本和普通apply来估算模型:

X <- replicate(n = 99, expr = rnorm(1000))
y <- rnorm(1000)
apply(X, 2, function(z) { lm(y~z) })

答案 1 :(得分:1)

使用复制

y <- rnorm(1000, 0, 1)

f = function(y){lm(y~rnorm(1000, 0, 1))}

models = replicate(10, f(y), simplify = FALSE)

summary(models[[1]])

答案 2 :(得分:0)

你可以做到

result_list <- lapply(1:8,function(i){
    summary(lm(y ~ get(paste0("x",i))))
})

这将为您提供包含所有结果的列表。

如果您不需要输入作为单个变量,您可以将它们放入矩阵中:

y <- rnorm(1000)
x_mat <- sapply(1:8,rnorm, n = 1000)
apply(x_mat,2,function(x){
    summary(lm(y ~ x))
})

这将再次产生一个包含结果的列表