4

data.table で奇妙なエラー メッセージが表示されました

を使用して data.table を変更しました:=が、エラーなしで完全に問題ありません。コードを関数に入れようとすると、次のエラー メッセージが表示されます。

Error in `:=`(date, as.Date(as.character(date), "%Y%m%d") - 1) : 
:= and `:=`(...) are defined for use in j, once only and in particular ways. See     help(":="). Check is.data.table(DT) is TRUE.

ここに再現可能な例があります

testdat <- data.table(ID = c(1:10), date = c(20130101, 20130101, 20130101, 20130101, 20130101, 20130101, 20130101, 20130101, 20130101, 20130101), Number = rnorm(10))
# The single line command works fine. 
testdat[, date := as.Date(as.character(date),"%Y%m%d") - 1][, Number:= NULL]
# But if I wrote them into a function, it failed. 
# ( In this case, it worked as well.. So I got totally lost. ) 
test2 <- data.frame(ID = c(1:10), date = c(20130101, 20130101, 20130101, 20130101, 20130101, 20130101, 20130101, 20130101, 20130101, 20130101), Number = rnorm(10))
readdata <- function(fn){
      DT <- data.table(fn)
      DT[, date:= as.Date(as.character(date),"%Y%m%d") - 1][, Number:= NULL]
      return(DT)
}

説明をわかりやすくするために、元のコードの一部をここに置きます。だから、どこが悪いのか理解できるかもしれません。

readdata <- function(fn){
   DT <- fread(fn, sep=",")
   # DT <- fread("1202.txt")
   setnames(DT, paste0("V",c(1:12)), column_names)
   # Modification on date
   setkey(DT,uid)
   DT[,date := as.Date(as.character(date),"%Y%m%d") - 1][, ignore:= NULL] #ignore is the name of one column
...}

txt ファイルのリストがあり、それぞれの計算を実行したいと考えています。最初のステップは fread を使用して、1 つずつ進めます。「1202.txt」ファイルに基づいて計算を行いたいとします。私がから始めてDT <- fread("1202.txt")次に進んだ場合。このエラーは発生しません。

使用したい場合readdata("1202.txt") はエラーメッセージが出ます。最も奇妙なのは、readdataエラーなしで以前を使用したことです。

それで、ここで何が起こっているのですか?助言がありますか?ありがとう。

> sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.8.11

loaded via a namespace (and not attached):
[1] tools_3.0.2

編集

いくつかの試行の後、コードを次のように変更すると機能することがわかりました

   readdata <- function(fn){
   DT <- fread(fn, sep=",")
   DT <- data.table(DT) ## Just add this line compared to the original one.
   # DT <- fread("1202.txt")
   setnames(DT, paste0("V",c(1:12)), column_names)
   # Modification on date
   setkey(DT,uid)
   DT[,date := as.Date(as.character(date),"%Y%m%d") - 1][, ignore:= NULL] #ignore is the name of one column
...}

それで、エラーはフレッドによるものですか?fread の後は、data.table である必要があります。data.table(DT) を使用して変換する必要があるのはなぜですか?

編集

ご清聴ありがとうございました。2014 年 2 月 4 日の更新情報は次のとおりです。

最初に 1.8.11 をアンインストールし、Matt の指示に従いました。CRAN から 1.8.10 を再度インストールし、彼のコードを順を追って実行しました。エラーなしで完全にOKであることがわかります。

次に、1.8.11 をアンインストールし、コンパイル済みの zip ファイルを使用して 1.8.11 を再度インストールしようとしました。

いつものように、警告メッセージがあります。

> install.packages("~/Desktop/data.table_1.8.11.zip", repos = NULL)
Warning in install.packages :
package ~/Desktop/data.table_1.8.11.zip?is not available (for R version 3.0.2)
Installing package into C:/Users/James/R/win-library/3.0?(as lib?is unspecified)
package data.table?successfully unpacked and MD5 sums checked

> require(data.table)
Loading required package: data.table
data.table 1.8.11  For help type: help("data.table")

警告メッセージが間違っているようですが、パッケージをロードするとまったく問題ありません。現時点では、プロセス全体で完全に問題ありません。Matt さん、Arun さん、そして他のすべての心のこもった人たちの忍耐に感謝します。私はdata.tableの初心者です。そして、あなたの親切は本当に感謝しています。

すでにこのリンクで報告しているように、まだ解決されていないことがもう 1 つあります。

> ?melt.data.table
No documentation for 憁elt.data.table?in specified packages and libraries:
you could try ??melt.data.table?

本当に残念です。何か案は?

そのリンクで自分の sessionInfo を報告しました。そして、私はWin8.1 64bitを使用しました

4

2 に答える 2

5

data.table v1.8.10 / v1.8.11 を再インストールした後 (2 つのバージョンの両方で試しました)、新しい R セッションを再開しました。問題は解決しました。

私の問題は、5 か月前の開発バージョンがインストールされていることが原因であることが判明しました。

data.tableホームページは少し誤解を招くものでした:

Windows 用にプリコンパイルされた最新の推奨スナップショット: v1.8.11 rev931 2013 年 9 月 4 日

[ホームページ][1] が改善され、次のようになりました。

install.packages("data.table", repos="http://R-Forge.R-project.org")
または、それが失敗した場合は、このホームページにコピーされた、最後にプリコンパイルされた Windows 用の .zip で十分かもしれません: v1.8.11 rev1110 04 Feb 2014

皆様、貴重な回答とコメントをありがとうございます。

于 2014-02-04T12:07:26.130 に答える