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

如何在R语言的匿名函数中正确使用across函数?

解决across匿名函数写法报错问题

你之前的错误出在匿名函数的写法上:\(x) na.rm = TRUE只是返回了一个布尔值,但across需要的是能对列数据进行统计计算的函数,所以才会报“only Booleans”的错误。

正确的匿名函数写法

要在匿名函数里调用传入的统计函数(即.x),并把na.rm=TRUE作为参数传递给它,代码如下:

sum_df2 <- map_dfr(funs,
  ~ summarize(df, across(where(is.numeric), \(x) .x(x, na.rm = TRUE))),
  .id = "statistic"
)

这里的\(x) .x(x, na.rm = TRUE)表示:对每一列x,执行当前迭代的统计函数(比如min、median),同时传入na.rm=TRUE参数处理缺失值。

更简洁的替代写法

如果你觉得匿名函数麻烦,也可以用purrr::partial来绑定参数,不用写匿名函数:

sum_df3 <- map_dfr(funs,
  ~ summarize(df, across(where(is.numeric), partial(.x, na.rm = TRUE))),
  .id = "statistic"
)

partial(.x, na.rm = TRUE)会帮你预先把na.rm=TRUE绑定到统计函数.x上,效果和匿名函数完全一致。

验证结果

运行上述代码后,sum_df2或sum_df3的输出和你最初的sum_df1完全相同:

# A tibble: 5 × 3
  statistic     a     b
  <chr>     <dbl> <dbl>
1 min      0.288  0.0456
2 median   0.408  0.453 
3 mean     0.543  0.498 
4 max      0.940  0.902 
5 sd       0.280  0.359 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:27:12