2012-05-18 89 views
1

Possible Duplicate:
Some issues trying to read a file with cbc.read.table function in R + using filter while reading files故障與cbc.read.table功能中的R

一)我想根據我經歷了什麼從colbycol包河讀一個比較大的.txt文件與功能cbc.read.table當我們有大文件時(讀取R中的GB多於一個),讀取這個包使得工作更容易,而且我們不需要所有的列/變量來進行分析。另外,我讀了功能cbc.read.table可以支持相同的read.table的參數。但是,如果我傳遞參數nrows(爲了讓我在R檔的預覽)我得到以下錯誤:

#My line code. I'm just reading columns 5,6,7,8 out of 27 
i.can <- cbc.read.table("xxx.txt", header = T, sep = "\t",just.read=5:8, nrows=20) 
#error message 
Error in read.table(file, nrows = 50, sep = sep, header = header, ...) : 
formal argument "nrows" matched by multiple actual arguments 

所以,我的問題是:你能告訴我怎樣才能解決這個問題?

B)之後,我試圖讀取用下面的代碼的所有實例:

i.can.b <- cbc.read.table("xxx.txt", header = T, sep = "\t",just.read=4:8) #done perfectly 
my.df <- as.data.frame(i.can.b) #getting error in this line 
Error in readSingleKey(con, map, key) : unable to obtain value for key 'Company' #Company is a string column in my data set 

所以,我的問題又是:我該如何解決這個問題?

c)您是否知道在閱讀文件時可以過濾(通過實例條件)的方式?

回答

1

在回答):

cbc.read.table()讀取該數據在50塊的塊:

tmp.data <- read.table(file, nrows = 50, sep = sep, header = header, 
     ...) 

由於函數已經分配nrows參數的值50,當它通過nrows您指定的參數,有兩個nrows參數傳遞給read.table(),導致錯誤。對我來說,這似乎是一個錯誤。爲了解決這個問題,你可以修改cbc.read.table()函數來處理指定的nrows參數或者接受類似於max.rows參數的東西(也可能把它作爲潛在補丁傳遞給維護者)。或者,您可以指定參數sample.pct,該參數指定要讀取的行的比例。所以,如果該文件包含100行,並且只需要50:sample.pct = 0.5

在回答B):

不知道這個錯誤是什麼意思。沒有可重複的例子很難診斷。如果你閱讀一個較小的文件,你會得到同樣的錯誤嗎?

在回答到c):

我一般喜歡存儲在關係數據庫中非常大的字符數據,例如MySQL。在你的情況下,使用RQLite包可能會更容易一些,它在R中嵌入一個SQLite引擎。然後SQL SELECT查詢可以用來檢索數據的條件子集。大於內存數據的其他程序包可在下找到大內存和內存不足數據 here:http://cran.r-project.org/web/views/HighPerformanceComputing.html