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)您是否知道在阅读文件时我可以过滤(按实例条件)的方式?
答案 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