2

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

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

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

一种或另一种方式,我只想将我的 9 个短向量放在数据文件的 9 列中。在我看来,我对第二种解决方案并不太远。

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

谢谢你的时间米歇尔

4

1 回答 1

1

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

  1. 首先将所有向量收集在一个 R 列表对象中。

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

  3. write.table只有然后通过一次调用or来写出结果表write.csv

这是一个例子:

## 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")
于 2012-09-28T17:05:13.670 回答