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

tidyr::expand_grid()运行结果不符合预期,问题出在哪里?

问题原因

tidyr::expand_grid()的参数处理逻辑是:将每个传入的独立参数作为一个维度,计算多个维度之间的笛卡尔积。
你现在的写法是expand_grid(a),仅传入了单个tibble对象作为唯一参数,函数会把整个tibble视为一个独立维度,不会自动拆分tibble内部的列作为多个独立维度处理,所以最终输出就是原tibble本身,不会计算列之间的笛卡尔积。

而你使用cross_df()的代码是先把tibble转为列表,相当于把b、c两列拆成了两个独立的向量元素传入cross_df(),函数会对这两个独立元素计算笛卡尔积,因此得到了你期望的4行结果。

正确实现方式

如果要使用expand_grid()得到相同的结果,有两种常用写法:

  1. 显式传入每一列作为独立参数:
expand_grid(b = unique(a$b), c = unique(a$c))
  1. 用!!!操作符将转成列表的tibble炸开为多个独立参数传入:
library(purrr)
expand_grid(!!!as.list(a) %>% map(unique))

两种写法的输出都和你用cross_df()得到的结果一致。

内容的提问来源于stack exchange,提问作者Mike Lawrence

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:27:02