【发布时间】:2017-06-20 06:30:01
【问题描述】:
我正在编写的 R 包中有一个非常大的表。为了减小分布的大小,我从表中删除了所有可以从其他列计算的列。例如,可以从日期计算星期几,所以我从包数据集中省略了星期几。但是,我想方便使用该包的任何人以标准方式重新计算这些列。为了提高效率,我想使用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[...。 -
dataset在哪里/如何定义? -
另请注意,基本 R 有一个
weekdays函数也可以执行此操作:weekdays(as.Date("2010-01-01"))。 -
@Roland 我更新了问题,因为我在函数中引用了错误的 data.table。再看看。至于表是如何打包的,它作为data.table包含在包中。但是,您不能在会话中修改包数据集,因此用户需要先进行复制。因此,公式需要将复制的表作为参数并对其进行修改。
标签: r data.table