我想使用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包,但这没有帮助。我仍然得到那个错误。
有谁知道如何处理这个问题?非常感谢提前!
答案 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