在同一会话中使用包dplyr和data.table导致mutate()中的复制错误

时间:2014-10-01 15:58:28

标签: r data.table dplyr

我想使用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包,但这没有帮助。我仍然得到那个错误。

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

1 个答案:

答案 0 :(得分:5)

函数copy来自data.table包。因此,当您分离 data.table时,dplyr无法找到函数copy(由于某种原因,它未正确导入)。

正如Hadley在评论中所说,这实际上是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