我在R中一直在努力解决这个问题:
假设我有一个for
循环,它运行超过9个数据文件。在这个循环中,我从较长的向量中提取一个短向量。容易。
之后,仍然在循环期间,我想用新提取的短矢量填充矩阵并将矩阵保存到文件中。这并不容易,因为短矢量都没有相同的长度。为了避免这个问题,我尝试直接在.csv
文件中使用write.table()
和append=TRUE
直接保存(仍在循环中)向量,但是R将所有9个向量附加到同一文件中列,当我想要9列。是否存在by.column=TRUE
之类的内容?
不管怎样,我只希望在数据文件中的9列中包含9个短向量。在我看来,我对第二种解决方案并不太了解。
有谁知道如何最终完成这个小程序?我将不胜感激。
感谢您的时间 米歇尔
答案 0 :(得分:1)
我建议你稍微调整你的工作流程,做这样的事情:
首先收集单个R列表对象中的所有向量。
仍然在R中,将矢量列表按到矩阵或data.frame中。 (一旦提取了所有向量,并且知道最长向量的长度,这将更容易。)
只有一次调用write.table
或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")