【问题标题】:using packages dplyr and data.table in same session causes copy error in mutate()在同一会话中使用包 dplyr 和 data.table 会导致 mutate() 中的复制错误
【发布时间】:2014-10-01 15:58:28
【问题描述】:

我想使用 data.table 包的快速 fread 功能来加载一个巨大的 csv 文件。加载后,我想将字符串变量转换为因子。但是当我想像这样对加载的文件进行变异时:

library(data.table)
library(dplyr)

df <- fread("df.csv")
df <- mutate(df, name = as.factor(name))

我得到这个错误:

Error in mutate.data.table(df, df = df, df = ,  : 
  could not find function "copy

我尝试在执行 mutate 之前分离 data.table 包,但这无济于事。我仍然得到那个错误。

有谁知道如何处理这个问题?非常感谢!

【问题讨论】:

  • 无法在我的机器上重现这个:library(data.table); library(dplyr);dt &lt;- data.table(iris); dt &lt;- mutate(dt, name = as.factor(Species))
  • fyi,data.table 方式是 df[, name := as.factor(name)](顺便说一句,不会复制和修改)
  • 为什么要混淆 dplyr 和 data.table? data.table 是一款很棒的软件 - 坚持下去,这是最好的.... 向 data.table 致敬!
  • 晦涩的 sql 语言 + 晦涩的 r 语言 = 很棒的软件!
  • data.table 取代了 *plyr 和 reshape 的需要,花时间学习它的语法,这是自切片面包以来最好的东西

标签: r data.table dplyr


【解决方案1】:

函数copy 来自data.table 包。所以当你分离 data.table, dplyr 找不到函数copy (由于某种原因它没有正确导入)。

正如 Hadley 在 cmets 中所说,这实际上是 dplyr 中的一个错误,在 dplyr 0.3 中不应再发生。

重现你的错误:

library(data.table)
library(dplyr)

# Creating the data.table
df <- data.table(name = 1:10)

#detaching data.table, this will cause the error
detach(package:data.table)

#dplyr can't find copy
mutate(df, name=as.factor(name))

Error in mutate.data.table(df, name = as.factor(name)) : 
  could not find function "copy"

注意,两个包都加载时不会出现错误:

library(data.table)
library(dplyr)
df <- data.table(name = 1:10)
mutate(df, name=as.factor(name))
    name
 1:    1
 2:    2
 3:    3
 4:    4
 5:    5
 6:    6
 7:    7
 8:    8
 9:    9
10:   10

【讨论】:

  • 这实际上是 dplyr 中的一个错误 - 它已在 0.3 中修复
猜你喜欢
  • 2015-08-23
  • 2015-09-09
  • 2015-08-25
  • 2016-03-30
  • 2015-12-22
  • 2013-10-27
  • 2014-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多