在tidytable的pmap_dfr中使用data.table shift函数异常的问题
问题解决:tidytable pmap_dfr中data.table移位操作失效
问题根源
在tidytable::pmap_dfr的执行环境中,shift()函数会优先调用tidytable包的同名实现,而非data.table版本。tidytable的shift()在处理单个向量输入时,行为与data.table的shift()存在差异,导致移位结果不符合预期。
修复方案
在函数内明确指定调用data.table::shift(),消除命名冲突:
library(data.table) library(tidytable) minimal_fixed_function <- function(A){ DT <- data.table(A) DT[ , A:= data.table::shift(A, fill = NA, type = "lag", n = 1)] return(DT) } # 单向量测试正常 minimal_fixed_function(c(1,2)) # pmap_dfr执行符合预期 tidytable::pmap_dfr(.l = list(c(1,2)), .f = minimal_fixed_function)
预期输出
执行上述代码后,pmap_dfr会返回正确结果:
# A tidytable: 2 × 1 A <dbl> 1 NA 2 1
额外建议
如果日常工作中同时使用data.table和tidytable,建议对所有同名函数(如shift、between等)都明确指定包命名空间,避免因环境作用域导致的函数调用混淆。
内容的提问来源于stack exchange,提问作者Michael Lachanski
相关产品推荐
相关产品推荐

