用不同长度的向量填充矩阵

时间:2012-09-28 16:16:24

标签: r loops vector matrix

我在R中一直在努力解决这个问题:

假设我有一个for循环,它运行超过9个数据文件。在这个循环中,我从较长的向量中提取一个短向量。容易。

之后,仍然在循环期间,我想用新提取的短矢量填充矩阵并将矩阵保存到文件中。这并不容易,因为短矢量都没有相同的长度。为了避免这个问题,我尝试直接在.csv文件中使用write.table()append=TRUE直接保存(仍在循环中)向量,但是R将所有9个向量附加到同一文件中列,当我想要9列。是否存在by.column=TRUE之类的内容?

不管怎样,我只希望在数据文件中的9列中包含9个短向量。在我看来,我对第二种解决方案并不太了解。

有谁知道如何最终完成这个小程序?我将不胜感激。

感谢您的时间 米歇尔

1 个答案:

答案 0 :(得分:1)

我建议你稍微调整你的工作流程,做这样的事情:

  1. 首先收集单个R列表对象中的所有向量。

  2. 仍然在R中,将矢量列表按到矩阵或data.frame中。 (一旦提取了所有向量,并且知道最长向量的长度,这将更容易。)

  3. 只有一次调用write.tablewrite.csv,才能写出结果表。

  4. 以下是一个例子:

    ## Set up your for() loop or lapply() call so that it returns a list structure 
    ## like 'l'
    l <- list(a=1:9, b=1:2, c=1:5)
    
    ## Make a matrix from the list, with shorter vectors filled out with ""s
    n <- max(sapply(l, length))
    ll <- lapply(l, function(X) {
        c(as.character(X), rep("", times = n - length(X)))
    })
    out <- do.call(cbind, ll)                 
    
    ## Then output it however you'd like. (Here are three options.)
    # write.csv(out, file="summary.csv")
    # write.csv(out, file="summary.csv", quote=FALSE)
    # write.table(out, file="summary.txt", row.names=FALSE, quote=FALSE, sep="\t")