R中data.table搭配formula的异常行为问题求助
问题原因
这是data.table表达式解析机制导致的异常:当在j参数中直接传入包含逗号的字符串时,data.table会把字符串内的逗号误识别为j中多表达式的分隔符,截断并破坏原formula字符串结构,最终生成错误公式。你公式里的L(s_dval, 32:0)和L(q_dval, 2:0)包含逗号,触发了这个解析问题。
解决方案
有两种可靠的解决方式:
方式1:预先生成公式对象
在data.table分组操作外部提前创建formula对象,再传入分组逻辑,避免data.table解析字符串内的逗号:
library(data.table) dt_test <- data.table("a"=rnorm(10), "b"=1:5) # 预生成公式 my_formula <- formula("z_val ~ s_val + q_val + L(s_dval, 32:0) + L(q_dval, 2:0) + 1 + tt + tt2") # 分组使用预生成的公式 dt_test[, .(.(my_formula)), .(b)]
方式2:用quote包裹公式表达式
如果需要在j内动态生成公式,用quote()包裹公式表达式再转成formula,阻止data.table提前解析逗号:
dt_test[, .(.(as.formula(quote(z_val ~ s_val + q_val + L(s_dval, 32:0) + L(q_dval, 2:0) + 1 + tt + tt2)))), .(b)]
运行上述代码后,每个分组返回的公式会和预期一致,不会出现多余的逗号。
内容的提问来源于stack exchange,提问作者oibaFox
相关产品推荐
相关产品推荐

