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

使用dplyr按行判断子集列是否全为NA时遇c_across报错问题

解决c_across()报错的方案

你遇到的错误核心是:c_across() 需要在dplyr的向量化动词上下文里使用,直接嵌套在base R的all()中时,dplyr无法正确识别它的调用环境。下面提供两种可行的解决方式:

推荐写法(无需rowwise,效率更高)

用dplyr专门的if_all()函数,直接判断指定列的每行是否全部满足is.na条件,这个方法是向量化操作,比逐行循环的rowwise()效率高很多:

d %>% mutate(anyEntries = if_all(v1:v3, is.na))

若坚持使用rowwise()+c_across()的写法

如果一定要保留rowwise()的逻辑,首先确保你的dplyr是最新版本(旧版本对c_across()的上下文支持存在缺陷),然后直接运行你写的代码即可:

d %>% rowwise() %>% mutate(anyEntries = all(is.na(c_across(v1:v3))))

更新版本后,dplyr能正确识别c_across()在rowwise()+mutate()中的上下文,报错会消失。

你提到逻辑在简单向量上正常,是因为base R函数不需要依赖dplyr的上下文规则,但在tidyverse的管道流中,必须遵循dplyr的函数调用规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:22:10