【问题标题】:Error: `callback` must have two or more arguments - readr错误:`callback` 必须有两个或多个参数 - 阅读器
【发布时间】:2017-03-05 12:44:43
【问题描述】:

我正在尝试通过 R 创建 sqlite 数据库。(它看起来不是很方便,但它应该可以工作。)

我正在使用 readr 和 dplyr 包。由于我有庞大的数据集,我试图通过 read_delim_chunked 拆分数据集,并调用我写的回调函数:

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)
}

但是,当调用 read_delim_chunked 时:

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)

我收到了这个奇怪的错误:

错误:callback 必须有两个或多个参数

传递给第二个参数的是什么,它需要在那里?

谢谢

【问题讨论】:

  • 尝试添加第二个参数并查看传递的内容,然后尝试使用调试器运行。这里有一些可能的提示?DataFrameCallback

标签: r readr


【解决方案1】:

回调默认为一个名为 SideEffectChunkCallback 的类。此类包含一个名为 receive 的函数,每次读入块时都会调用该函数。这是函数定义 (Git)

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

它被这样调用(Git)

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

其中 out 是当前数据帧块,pos 是文件中当前块开始的行号。我不确定他们为什么将索引传回(未使用)并强制您的回调函数为其提供参数。我只是像这样在我的回调函数中添加了一个虚拟变量,效果很好。

myCallBackFunction <- function(dfChunk, dummyVar){

【讨论】:

    猜你喜欢
    • 2021-11-17
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多