通过申请避免循环 - 值得麻烦吗?

时间:2014-12-24 20:57:21

标签: r

我写了一个Rscript来以一种理想的格式提供一些数据。特别是我只想重新排列数据集,最终得到8行12列(96孔板格式)。我嵌套了两个for循环,完全正常:

element1 = seq(1,96,1)
element2 = seq(0.5,48,0.5)
df = data.frame(element1,element2)
storage = data.frame(matrix(NA,nrow = 8, ncol = 12))
container = vector("list",ncol(df))

for (n in 1:ncol(df)){
      j = 0  
        for (i in seq(1,length(df[,n]),12)) { 
              j = j+1
              storage[j,] = df[(i):(i+11),n]  
          }
     container[[n]]=storage

}

注: 我将数据打包在列表中,以便在.xls中轻松导出 而且我知道这是一种非常简单的方法......但是它有效。

我愿意学习:-)因为我读了很多,应该避免循环并使用" apply"与功能相结合。我尝试使用apply和函数来解决任务。但是我无法得到结果,函数的使用和应用对我来说似乎要复杂得多。因此,总是值得避免循环吗?如果是的话,你会怎么做?

谢谢,Christian

1 个答案:

答案 0 :(得分:7)

您似乎只是将每列重新整形为矩阵。怎么样只是

container <- lapply(df, matrix, byrow=T, ncol=12)

如果您确实需要data.frame,请尝试

container <- lapply(df, function(x) data.frame(matrix(x, byrow=T, ncol=12)))