如何在函数中动态修改data.table的列值?
如何在函数内修改data.table中的列值?
原代码的核心问题有两个:
change_it函数未定义column参数,调用时传入的列名变量无法被函数接收,函数内实际使用的是全局环境的变量(若存在);- 直接使用普通赋值
[[<-并非data.table推荐的修改方式,可能因副本创建导致原对象未更新。
方法一:使用data.table专属的:=操作符(推荐)
:=是data.table设计的原地修改操作符,能直接修改原对象的引用,无需返回赋值。结合动态列名传递,代码如下:
library(data.table) DF = data.table(ID = c("b","b","b","a","a","c"), a = 1:6, b = 7:12, c = 13:18) change_it <- function(data_table, column) { # 用括号包裹column变量,实现动态列名传递 data_table[, (column) := 73] } column = 'a' change_it(DF, column) # 验证修改结果 DF
运行后DF的a列会全部变为73,因为:=直接在原data.table对象上完成修改。
方法二:修正参数后使用[[赋值
如果坚持使用普通赋值语法,需确保函数正确接收column参数,代码如下:
change_it <- function(data_table, column) { data_table[[column]] <- 73 } column = 'a' change_it(DF, column)
这种方式也能生效,但不如:=符合data.table的设计理念,在复杂操作中可能出现副本创建的问题,因此优先推荐第一种方法。
内容的提问来源于stack exchange,提问作者AturSams
相关产品推荐
相关产品推荐

