R中的用户定义函数具有意外行为

时间:2016-03-12 15:50:49

标签: r data.table

我的这个功能有问题。 它为我提供了我想要的修改数据表,但也改变了原始数据表。

我想要的是两个不同的数据表。输入应该保持不变,修改后的输入应该给我这个例子给我的东西。

if (!require('data.table')) {
  install.packages('data.table')
}

DT <- data.table(x=rnorm(10, 0, 3), y=rnorm(10, 2, 2))

func <- function(input) {

  data <- input

  data[x >= abs(1.5), c('trigger') := list(y)]
  data[y >= 3.5, c('trigger2') := list(x)]

  return (data)
}

DT_modif <- func(DT)

我不知道为什么会出现这种副作用。

1 个答案:

答案 0 :(得分:4)

data.table的要点是所有内容都是通过引用传递的。这包括制作数据表的副本;在您的代码中,datainput都是对相同基础表的引用。

如果您想要一个新的独立数据表,请使用copy

data <- copy(input)