在R中使用cbc.read.table函数进行故障

时间:2012-05-18 15:44:31

标签: r

  

可能重复:
  Some issues trying to read a file with cbc.read.table function in R + using filter while reading files

a)我正在尝试从R中的cbc.read.table包中读取一个功能为colbycol的相对较大的.txt文件。根据我一直在阅读的内容,这个包使得工作变得更容易我们有大文件(超过GB要在R中读取),我们不需要所有的列/变量进行分析。另外,我读到函数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 个答案:

答案 0 :(得分:1)

回复a):

cbc.read.table()以50行的方式读取数据:

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

由于函数已经为nrows参数赋值50,当它传递您指定的nrows参数时,有两个nrows参数传递给{{ 1}},导致错误。对我来说,这似乎是一个错误。为了解决这个问题,您可以修改read.table()函数来处理指定的cbc.read.table()参数,或者接受类似nrows参数的内容(并且可能将其作为潜在的补丁传递给维护者) )。或者,您可以指定max.rows参数,该参数指定要读取的行的比例。因此,如果文件包含100行,并且您只需要50:sample.pct

回复b):

不确定该错误的含义。没有可重复的例子很难诊断。如果你读一个较小的文件,你会得到同样的错误吗?

回复c):

我通常更喜欢在关系数据库中存储非常大的字符数据,例如MySQL。在您的情况下,使用RSQLite包可能更容易,该包在R中嵌入SQLite引擎。然后SQL SELECT查询可用于检索条件数据子集。其他大于内存数据的软件包可以在大内存和内存不足数据下找到:http://cran.r-project.org/web/views/HighPerformanceComputing.html