You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中使用cragg包结合map迭代时报object is not a matrix错误如何解决

报错原因

该错误由公式表达式未按预期求值导致:
cragg_donald函数的Z参数需要接收右侧为变量名的公式对象,而purrr迭代时传入的.x是字符串类型,你在公式内直接写.x %>% as.name()的写法不会被提前求值,函数最终拿到的是未解析的表达式,无法对应到数据框中的实际列,内部处理时就会抛出object is not a matrix的报错。

解决方案

下面两种写法都可以正常运行:

方案1:基础R动态构造公式

将迭代的变量名拼接为公式字符串后转成公式对象传入:

y <- data.frame(gender = rbinom(100, 1, 0.5), age = rnorm(100), vcam = rnorm(100), 
                rs6696259 = rbinom(100, 2, 0.5), rs5491 = rbinom(100, 2, 0.5))

purrr::map(c("rs6696259", "rs5491"), ~
  cragg_donald(
    X =~ gender + age,
    D =~ vcam,
    Z = as.formula(paste0("~ ", .x)),
    data = y
  )
)

方案2:整洁栈元编程注入

用rlang的符号注入逻辑把变量名提前注入到公式中:

library(rlang)
y <- data.frame(gender = rbinom(100, 1, 0.5), age = rnorm(100), vcam = rnorm(100), 
                rs6696259 = rbinom(100, 2, 0.5), rs5491 = rbinom(100, 2, 0.5))

purrr::map(c("rs6696259", "rs5491"), ~
  cragg_donald(
    X =~ gender + age,
    D =~ vcam,
    Z =~ !!sym(.x),
    data = y
  )
)

内容的提问来源于stack exchange,提问作者love-learning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:54:03