【发布时间】:2015-03-12 17:15:14
【问题描述】:
我正在从使用 R 中的 data.frame 过渡到 data.table 以获得更好的性能。转换代码的主要部分之一是将自定义函数从应用于 data.frame 应用到在 data.table 中使用。
假设我有一个简单的数据表 dt1。
x y z---header
1 9 j
4 1 n
7 1 n
我正在尝试根据 x,y,z 的值计算 dt1 中的另一个新列 我尝试了 2 种方法,它们都给出了正确的结果,但更快的一种会发出警告。因此,在我使用更快的版本转换现有代码之前,要确保警告没有严重。
(1) dt1[,a:={if((x<1) & (y>3) & (j == "n")){6} else {7}}]
(2) dt1[,a:={if((x<1) & (y>3) & (j == "n")){6} else {7}}, by = 1:nrow(x)]
版本 1 的运行速度比版本 2 快,但会发出警告“条件的长度 > 1,只会使用第一个元素” 但结果是好的。 第二个版本稍慢,但没有给出警告。 一旦我开始编写复杂的函数,我想确保第一版不会给出不稳定的结果。
请将此问题视为通用问题,以运行用户定义的函数,该函数希望访问给定行中的不同列值并计算该行的新列值。
感谢您的帮助。
【问题讨论】:
标签: r data.table