2015-02-06 40 views
1

這個問題很簡單,甚至可能是愚蠢的,但我在google上找不到答案。我試圖用這個命令來讀取一個.txt文件到R:當R從read.csv命令用完空間時,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

(1)我不明白你的'col.names'說法有具有觀察不同數量的不同行的事,( 2)'fill = TRUE'可能會極大地擴展數據幀的結果大小:70 x 100k,(3)無論如何,即使對於'read.table',運行時間也太長了。強制它停止並嘗試其他的東西(可能是'fread')。 – joran 2015-02-06 18:51:43

+0

'''read.csv()'''適用於.csv文件。我想你正在尋找'''read.table()'''而不是。你能提供你的文本文件的樣本嗎? – rsoren 2015-02-06 18:54:19

+1

你想對這些數據做什麼分析?數據幀可能不是最佳的。也許使用'readLines()'並以不同的方式處理70行,也許使用'strsplit()'? – Andrie 2015-02-06 19:06:52

回答

0

顯然未經測試,但應該給你一些代碼來修改:

datL <- readLines("perm2test.txt") # one line per group 
# may want to exclude some lines but question is unclear 
listL <- lapply(datL, function(L) read.delim(text=L, colCasses="numeric")) 
# This is a list of values by group 
dfL <- data.frame(vals = unlist(listL), 
# Now build a grouping vector that is associated with each bundle of values 
        groups= rep(LETTERS[1:length(listL)] , 
           sapply(listL, length)) 
# Might have been able to do that last maneuver with `stack`. 

library(lattice) 
bwplot(vals ~ groups, data=dfL)