data.table
関数内を変更したいのですが。:=
関数内でこの機能を使用すると、結果は2回目の呼び出しでのみ出力されます。
次の図を見てください。
library(data.table)
mydt <- data.table(x = 1:3, y = 5:7)
myfunction <- function(dt) {
dt[, z := y - x]
dt
}
関数のみを呼び出すと、テーブルは印刷されません(これは標準の動作です。ただし、返さdata.table
れたオブジェクトを新しいオブジェクトに保存すると、最初の呼び出しでは印刷されず、2番目の呼び出しでのみ印刷されます。
myfunction(mydt) # nothing is printed
result <- myfunction(mydt)
result # nothing is printed
result # for the second time, the result is printed
mydt
# x y z
# 1: 1 5 4
# 2: 2 6 4
# 3: 3 7 4
なぜこれが起こるのか、そしてそれを防ぐ方法を説明できますか?
デビッドArenburgがに言及したコメント、答えを見つけることができるここに。バージョン1.9.6で修正されたバグがありましたが、修正によりこの欠点が導入されました。
DT[]
この動作を防ぐには、関数の最後で呼び出す必要があります。
myfunction <- function(dt) {
dt[, z := y - x][]
}
myfunction(mydt) # prints immediately
# x y z
# 1: 1 5 4
# 2: 2 6 4
# 3: 3 7 4
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加