簡體   English   中英

函數ff:read.csv.ffdf中的colClasses參數的當前狀態(ff-R程序包)

[英]Current status of colClasses argument in function ff:read.csv.ffdf (ff - R package)

由於以下代碼中的參數colClasses=c("id"="character") ,錯誤colClasses=c("id"="character") vmode 'character' not implemented

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

read.table.ffdf 1..1000(1000)csv-read = 0.02sec ff中的錯誤(initdata = initdata,length = length,levels = level,ordered = ordered,:
vmode“字符”未實現

其中TenGBsample.csv中的第一TenGBsample.csv 'id',由30位數字組成,超過了我的64位系統(Windows)上的最大數字,我想將它們作為字符進行處理,第二列包含小數字,因此無需調整。

我已經檢查過,並且有vmode “字符”模式: http : //127.0.0.1 : vmode / vmode.html

請注意help(read.csv.ffdf)的以下內容

... read.table.ffdf行為設計得盡可能類似於read.table 但是,請注意以下差異:

  1. 不支持字符向量 ,必須將字符數據讀取為以下colClasses之一:'Date','POSIXct','factor,'ordered'。 默認情況下,字符列被視為因素。 因此,不允許使用參數“ as.is”和“ stringsAsFactors”。

因此,您無法讀取字符中的值。 但是,如果文件中的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使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM