我有一个大矩阵,我想对其进行转置,而不必将其放入内存中。我可以想到三种方法来实现这一目标:
- 将原始矩阵逐列写入 .txt 文件。随后,使用
readLines(...)
将其逐行读入内存,并按顺序将这些行写入新文件。这种方法的问题是我不知道如何按列而不是按行附加到 .txt 文件。 - 从 .txt 文件中逐列读取矩阵,然后逐行将这些列写入新文件。我已使用
scan(pipe("cut -f1 filename.txt"))
尝试过此操作,但此操作在每次迭代时都会打开一个单独的连接,因此由于相关的开销,需要很长时间才能完成打开和关闭这些连接。 - 使用一些未知的 R 函数来完成任务。
我在这里缺少什么吗?我需要使用单独的程序来执行此操作吗?预先感谢您的帮助!
最佳答案
有很多语言在这类事情上做得更好。如果您确实想使用 R,则必须一次读取一行文件,从所需的列中取出一个元素,将其存储在向量中,然后将该向量写入一行。并对每一列执行此操作。
Columns = 1e9
Rows = 1e6
FileName = "YourFile.csv"
NewFile = "NewFileName"
for(i in 1:Columns)
{
ColumnToBeRow = vector("numeric", Columns)
for(j in 1:Rows)
{
ColumnToBeRow[j] = read.csv(FileName, nrows=1, skip=(j - 1), header=F)
}
write.csv(ColumnToBeRow, NewFile, append=TRUE)
}
关于r - 如何在 R 中有效转置矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25331830/