函数ff中的colClasses参数的当前状态:read.csv.ffdf(ff -R package)

时间:2015-01-30 18:21:53

标签: r ff read.csv

由于以下代码中的参数vmode 'character' not implemented而导致错误colClasses=c("id"="character")

df <- read.csv.ffdf('TenGBsample.csv',
      colClasses=c("id"="character"), VERBOSE=TRUE)
  

read.table.ffdf 1..1000(1000)csv-read = 0.02secff ff(initdata =   initdata,length = length,levels = levels,ordered = ordered,:
  vmode&#39;字符&#39;没有实施

TenGBsample.csv中的第一列是&#39; id&#39;并且由30位数字组成,超过了我的64位系统(Windows)上的最大数量,我想将它们作为字符处理,第二列包含小数字,因此无需调整。

我已经查过了,并且有一个&#39;字符&#39; vmode的模式:http://127.0.0.1:16624/library/ff/html/vmode.html

1 个答案:

答案 0 :(得分:1)

请注意help(read.csv.ffdf)

中的以下内容
  

... read.table.ffdf的设计行为同样多   像read.table一样尽可能。但请注意以下差异:

     
      
  1. 不支持字符向量,必须是字符数据   读作以下colClasses之一:&#39; Date&#39;,&#39; POSIXct&#39;,&#39; factor,&#39; ordered&#39;。默认情况下,字符列被读作因子。   相应的论点&as; as .is&#39;和&#39; stringsAsFactors&#39;是不允许的。
  2.   

所以你无法读取字符中的值。但是,如果您已经为文件中的id列提供了数值,那么您可以将它们作为双精度读取,然后重新格式化。 format(x, scientific = FALSE)将以标准表示法打印x

以下是一个示例数据集x,其中id是数字且有30位数。

library(ff)

x <- data.frame(
    id = (267^12 + (102:106)^12),  
    other = paste0(LETTERS[1:5],letters[1:5])
)
## create a csv file with 'x'
csvfile <- tempPathFile(path = getOption("fftempdir"), extension = "csv")
write.csv(
    format(x, scientific = FALSE), 
    file = csvfile, row.names = FALSE, quote = 2
)    
## read in the data without colClasses
ffx <- read.csv.ffdf(file = csvfile)
vmode(ffx)
#       id     other 
# "double" "integer" 

现在,我们可以使用ffx强制data.frame加入ffx[,]课程,并重新格式化id列。

df <- within(ffx[,], id <- format(id, scientific = FALSE))
class(df$id)
# [1] "character"
df
#                               id other
# 1 131262095302921040298042720256    Aa
# 2 131262252822013319483345600512    Bb
# 3 131262428093345052649582493696    Cc
# 4 131262622917452503293152460800    Dd
# 5 131262839257598318815163187200    Ee