2014-10-01 12 views
2

我想使用data.table包的fast fread函數來加載一個巨大的csv文件。加載後,我想將一個字符串變量轉換爲一個因子。但是,當我想要做的加載文件這樣一個發生變異:在同一會話中使用包dplyr和data.table導致mutate()中的複製錯誤

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 

我試着做了發生變異之前卸下data.table包,但沒有幫助。我仍然得到這個錯誤。

有誰知道如何處理這個問題?提前謝謝了!

+1

我的機器上不能重現這樣的:'庫(data.table) ; library(dplyr); dt < - data.table(iris); (數據)) dt < - mutate(dt,name = as.factor(Species)) ' – EDi 2014-10-01 16:01:43

+4

fyi,'data.table'方法是'df [,name:= as.factor(name)]'(btw doesn' t複製並修改) – eddi 2014-10-01 16:01:50

+7

爲什麼要混合dplyr和data.table? 'data.table'是一個偉大的軟件 - 只要堅持下去,最好....所有的人都熱衷於data.table! – EDi 2014-10-01 16:03:16

回答

5

函數copy來自data.table包。所以當你detachdata.tabledplyr找不到函數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 
+0

感謝您的幫助! – rdatasculptor 2014-10-01 20:00:32

+3

這實際上在技術上是dplyr中的一個錯誤 - 它固定在0.3 – hadley 2014-10-02 20:38:31

相關問題