【发布时间】:2015-02-06 18:41:19
【问题描述】:
这个问题很简单,甚至可能很愚蠢,但我在谷歌上找不到答案。我正在尝试使用此命令将 .txt 文件读入 R:
data <- read.csv("perm2test.txt", sep="\t", header=FALSE, row.names=1, col.names=paste("V", seq_len(max(count.fields("perm2test.txt", sep="\t"))), sep=""), fill=TRUE)
我有 col.names 命令的原因是因为我的 .txt 文件中的每一行都有不同数量的观察。我已经在一个小得多的文件上对此进行了测试,它可以工作。但是,当我在我的实际数据集(只有 48MB)上运行它时,我不确定它是否正常工作......我不确定的原因是因为我没有收到错误消息,但它有此时已经“运行”了超过 24 小时(只是上面的 read.csv 命令)。有没有可能是内存用完了,只是不输出警告?
我环顾四周,我知道有人说有一些功能可以减小大小并删除不需要的行等,但老实说,我不认为这个文件有那么大,不幸的是我确实需要文件中的每一行...(实际上只有 70 行,但有些行包含多达 100k 个条目,而其他行可能只有 100 个)。任何想法发生了什么?
【问题讨论】:
-
(1) 我不明白您的
col.names参数与具有不同观察次数的不同行有什么关系,(2)fill = TRUE可能会大大扩展数据的结果大小frame: 70 x 100k, (3) 不管怎样,运行时间太长了,即使是read.table。强制它停止并尝试一些其他的东西(fread可能)。 -
read.csv()适用于 .csv 文件。我认为您正在寻找read.table()。你能提供一个你的文本文件的样本吗? -
您想对这些数据进行什么分析?数据框可能不是最优的。也许使用
readLines()并以不同的方式处理 70 行,也许使用strsplit()? -
返回什么:
table(count.fields("perm2test.txt", sep="\t"))? -
read.table() 不起作用,因为它希望所有行都具有相同数量的条目。 col.names() 将编号的列标题分配到条目数最多的行,我使用它作为 read.csv() 将只取前 5 行中的最大行,并任意决定将其作为最大数表其余部分的列数(而后面的一些行需要更大的列)
标签: r csv memory memory-management