2017-05-20 17 views
0

不合格的数据表,作为函数的参数传递,不带复制修改的修改:在“R”函数参数数据表中修改时禁止复制?

dt<-data.table(RowId=c('a','b','c','d'),x=0:3) 
f<-function(adt){adt[,x:=4]} 
f(dt) 
dt 
# RowId x 
#1:  a 4 
#2:  b 4 
#3:  c 4 
#4:  d 4 

我想在有限的一组行保留这种行为,因为在:

f(dt[x>1]) 
dt 
# RowId x 
#1:  a 0 
#2:  b 1 
#3:  c 4 
#4:  d 4 

而而不是必须在功能中嵌入限制或将限制作为参数传递到功能中。

有没有办法做到这一点?

如果没有,那么替换dt行对应于从函数返回的副本中行的最简约的方法是什么?

回答

0

这是我落得这样做:

dt[f(dt[x>1]),x:=i.x,on="RowId"]

0

据我所知你不能。

但你可以做

myfun <-function (x){ 
    4 
} 

dt[x>1,x:=myfun(x)] 
+0

为什么会是任何比第一种情况下,这是目前允许更危险? – user3673

+0

如果函数修改甚至初始化多个列,该怎么办? – user3673

+0

你说得对,它并不比第一种情况更危险。如果你想要一个修改多个列的函数看看[这里](http://stackoverflow.com/questions/11308754/add-multiple-columns-to-r-data-table-in-one-function-调用#11308946) – DJJ