【发布时间】:2018-11-19 12:35:29
【问题描述】:
我正在编写一个函数来根据条件从 data.table 变量中选择值。问题是当变量名与函数参数名不匹配时,没有正确选择。代码如下。
library(data.table)
dt <- data.table(x = c(1, 2, 3, NA, NA),
y = c(2, 4, 3, 5, NA))
dd <- data.table(p = c(1, 2, 3, NA, NA),
q = c(2, 4, 3, 5, NA))
is.data.table(dt)
is.data.table(dd)
variable_chooser <- function(dt, x , y ) {
dt[!is.na(x), z := x]
dt[is.na(x) & !is.na(y), z := y]
dt[is.na (x) & is.na(y), z := NA]
}
variable_chooser(dt, dt$x, dt$y)
variable_chooser(dd, dd$p, dd$q)
dt
dd
最后2个数据集是这样的。
> dt
x y z
1: 1 2 1
2: 2 4 2
3: 3 3 3
4: NA 5 5
5: NA NA NA
> dd
p q z
1: 1 2 1
2: 2 4 2
3: 3 3 3
4: NA 5 2
5: NA NA NA
dd 数据集的 z 变量第四行的值取自 q 的第一行而不是第四行。使用dt,代码可以按我的预期工作。
如何使dd 的代码以相同的方式工作?
谢谢。
【问题讨论】:
-
我猜如果你这样做
variable_chooser <- function(myData, x , y ) {...那么 dt 也会失败。 -
不,如果数据集名称不同,它会按预期工作。
标签: r data.table