2017-05-20 56 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