在 "R" 函数参数数据表中禁止复制修改?
Inhibit Copy On Modify In "R" Function Argument Data Tables?
作为函数参数传递的不合格数据表可在修改时修改,无需复制:
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
中与函数返回的副本中的行相对应的行的最简洁方法是什么?
据我所知你不能。
但你可以做到
myfun <-function (x){
4
}
dt[x>1,x:=myfun(x)]
这就是我最后做的事情:
dt[f(dt[x>1]),x:=i.x,on="RowId"]
作为函数参数传递的不合格数据表可在修改时修改,无需复制:
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
中与函数返回的副本中的行相对应的行的最简洁方法是什么?
据我所知你不能。
但你可以做到
myfun <-function (x){
4
}
dt[x>1,x:=myfun(x)]
这就是我最后做的事情:
dt[f(dt[x>1]),x:=i.x,on="RowId"]