R data.table-在函数

时间:2019-01-23 20:21:34

标签: r data.table

我试图选择一行,然后在函数内部更新data.table的列。我发现我用来选择行的条件不起作用,整个data.table正在更新。请参见下面的示例。

library(data.table)
set.seed(123)
dt = data.table(id = as.character(seq(1:10)), V1 = runif(10, 10, 100))

示例“ dt”看起来像

   id       V1
1:  1 35.88198
2:  2 80.94746
3:  3 46.80792
4:  4 89.47157
5:  5 94.64206

下面的函数(“ DTsubset”)基于3种选择传递的data.table子集的方式返回3个data.table的列表。我希望该函数返回3个相同的data.tables,但是当传递的对象与要比较的data.table的列具有相同的对象名称时,它也将返回整个data.table(对于“ subset1”,其中“ id”为与“ DT $ id”相比)。

DTsubset = function(DT, id) {
  subset1 = DT[ which(DT$id == id), ]
  # returns entire dt??
  index = which(DT$id == id)
  subset2 = DT[ index, ] 
  # return subset when row index is explicitly passed
  idbutnotnamedid = id
  subset3 = DT[ which(DT$id == idbutnotnamedid)]
  # return subset when passed id is not named "id"
  return( list( subset1, subset2, subset3 ))
}

DTsubset(dt, "2") 

[[1]]
   id       V1
1:  1 35.88198
2:  2 80.94746
3:  3 46.80792
4:  4 89.47157
5:  5 94.64206

[[2]]
   id       V1
1:  2 80.94746

[[3]]
   id       V1
1:  2 80.94746

如果有人能解释为什么会观察到上述行为,这也许是最有效的方式,它可以对一个行进行子集化并更新给定data.table上的值,这将是我的感激之情。

0 个答案:

没有答案