2017-03-05 2 views
1

I SQLite-Datenbank über R. zu schaffen versuchen (es nicht sehr praktisch sein, aber es sollte funktionieren.)Fehler: `callback` müssen zwei oder mehr Argumente haben - readr

Ich bin mit readr und dplyr Paket. Wie ich riesige Datenmenge habe, versuche ich, die Datensätze über read_delim_chunked zu spalten, und rief Callback-Funktion schrieb ich:

modifier<-function(chunk){ 
    result<-cbind(chunk %>% 
     filter(X1=="T") %>% 
     select(X2) %>% transmute(date=parse_date_time2(X2, orders = "%Y-%m-%d %H:%M:%S")), 
     chunk %>% 
     filter(X1=="U") %>% 
     select(X2) %>% transmute(str_sub(X2, 20)), 
     chunk %>% 
     filter(X1=="W")%>% 
     select(X2)) 
    names(result)<-c("time", "user", "tweet") 
    db_insert_into(con=my_db$con, table="my_fav_table", values=result) 
} 

Wenn jedoch read_delim_chunked Berufung:

read_delim_chunked(file="/datadrive/tweets2009-07.txt", 
        chunk_size = 99999, 
        callback = modifier, 
        delim = "\t", 
        escape_double = FALSE, 
        col_names = FALSE, 
        trim_ws = TRUE, 
        skip = 1) 

ich diese seltsame Störung erhalten:

Error: callback must have two or more arguments

Was auf das zweite Argument übergeben wird, dass es dort sein muss?

Dank

+0

Versuchen Sie, ein zweites Argument hinzuzufügen und zu sehen, was übergeben wird, und versuchen Sie, mit dem Debugger zu laufen. Es gibt einige mögliche Hinweise hier? DataFrameCallback – Spacedman

Antwort

0

Rückrufe zu einer Klasse Standard SideEffectChunkCallback genannt. Dar. Diese Klasse eine Funktion enthält, genannt empfangen, die aufgerufen werden jedes Mal ein Stück eingelesen Dies ist die Funktion Definition (Git):

receive = function(data, index) { 
    result <- private$callback(data, index) 
    private$cancel <- identical(result, FALSE) 
} 

es so (Git)

R6method(callback, "receive")(out, pos); 

aufgerufen wird, wo aus den aktuellen Daten Frame Chunk und Pos ist die Zeilennummer in der Datei, in der der aktuelle Chunk beginnt. Ich bin nicht sicher, warum sie den Index zurückgeben (es wird nicht verwendet) und zwingen Sie Ihre Rückruffunktion, einen Parameter dafür zu haben. Ich habe soeben eine Dummy-Variable zu meiner Callback-Funktion hinzugefügt, die gut funktioniert.

myCallBackFunction <- function(dfChunk, dummyVar){ 
Verwandte Themen