私が書いているRパッケージには非常に大きなテーブルがあります。ディストリビューションのためにサイズを小さくするために、私は他のカラムから計算できるテーブルからすべてのカラムを削除しています。たとえば、曜日は日付から計算できるので、パッケージデータセットから曜日を除外します。ただし、これらの列を標準的な方法で再計算すると便利です。効率を上げるために、私はdata.table
で割り当てを行いたいと思います。data.table格納された関数としての列の割り当て
dt = myPackageData # minimal data set included in the package
extend_dow = function(your_data_table) {
your_data_table[,`:=`(day_of_week = lubridate::wday(my_date))]
}
extend_dow(dt)
そしてdt
使用可能day_of_week
列を持っているでしょう:私はこのようなものを想像しています。
私が遭遇している問題は、新しい列のインプレース割り当てが下位レベルの環境で発生しているようで、関数に渡すdata.tableが実際には変更されないということです。
誰かが新しい列の完全な数式をどのように格納できるかを知っていますが、ユーザーが関数に渡す同じdata.tableへの単一の関数呼び出しを使用して適用できますか?
このアプローチはdata.tableで動作します。私は手動で作成します。それがあなたにも役立つことを確認してください。また、 'dataset'を使って作成されたdata.tableだけではできません。 PS:関数内に 'your_data_table [...]する必要があります。 – Roland
/datasetはどのように定義されていますか? – Roland
また、基底Rに 'weekdays'関数があります。これは' weekdays(as.Date( "2010-01-01")) 'です。 – lmo