【问题标题】:Assign values from a for loop in R从 R 中的 for 循环中赋值
【发布时间】:2015-01-09 17:13:19
【问题描述】:

我有一个包含“i”列的数据框,并希望在每一列上运行“j”回归,而不是从另一个函数(cluster_simple)中提取的组件,返回一个向量,使得:

print(RSquared_1)
[1] "rsquared value 1" "rsquared value 2" "etc," 

为此,我有两个循环:

for (i in 1:columns)
  {assign(paste("Rsquared_",i,sep="",collapse=NULL),
            #Assign these values from this loop 
            for (j in 1:iterations) 
              { exp<-cluster_simple(frame,number,noprint=T)
                reg<-lm(exp[,'clusters']~exp[,i])
                rsq[j]<-summary(reg)$r.squared
              }
          )
  }

到目前为止,两个循环都可以自己很好地工作,但是我无法获得要分配给变量的值,我最终得到:

print(RSquared_1)
NULL

我需要在分配中应用一些特定的功能吗?

【问题讨论】:

  • 使用assign 是您的第一个错误。这就是预分配列表的用途。为什么你每次都计算cluster_simple(),它似乎没有改变......?你做了多少 R2 值?带有创建 iterations 的内部 for 循环(以及在哪里创建 rsq?),如何将 iterations R2 值折叠为每个 i 的单个值?
  • 感谢您的回复。我必须使用分配,因为列数(“i”)会随每个数据帧而变化(我不能列出固定数量的变量)。 cluster_simple() 有一个随机分量,这就是为什么我要多次运行大量回归。大约 1,000 个 rsquared 变量。最终我想要的是一个将所有 rsquared 值分配给 RSquared_columnnumber 的向量
  • 您不需要使用assign。每个数据框的大小可以通过编程方式确定,并用于创建适当长度的列表。

标签: r loops for-loop assign


【解决方案1】:

如果你想要的只是ij r 平方值的集合,你可以做一些更简单的事情。

这将回归一个由cluster_sample 在每个ij 次返回的向量。输出是一个长度为i的列表,其中每一项都是j的r平方值。

n <- 20 # rows
i <- 10 # columns
j <- 5 # iterations

# dummy data
dat <- data.frame(matrix(rnorm(n*i), ncol=i))

# dummy function
cluster_simple <- function() rnorm(n)

# regress cluster_simple on each column i, j times
r_sq_list <-
  lapply(1:i, function(ii) {
    sapply(1:j, function(jj) {
      summary(lm(cluster_simple() ~ dat[,ii]))$r.squared
    })
  })


# get the r_sq for the 7th column regression, 3rd iteration
r_sq_list[[7]][3]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 2021-12-17
    • 2017-10-20
    • 1970-01-01
    • 2016-09-24
    • 2016-01-17
    • 2014-01-21
    相关资源
    最近更新 更多