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

使用dplyr::rowwise计算行和异常,哪里可查其使用限制相关资料?

问题原因分析

你自定义的get_from_df函数里的get(pos=df)直接读取了全局环境下的完整df对象的整列数据,没有识别到rowwise创建的行分组上下文。rowwise本质是把每行设为一个独立分组,在dplyr的data mask机制下,直接引用列名才会自动取当前行的对应值,而你用get调用绕过了data mask的识别,所以每次sum计算的是x整列和y整列的总和,所有行的计算结果自然都是310。

rowwise的运行逻辑
  • rowwise是一种特殊的分组操作,生成的rowwise tibble每个分组仅包含原数据的一行
  • 配套的c_across()函数用来在rowwise上下文下动态选择多列,适配dplyr的非标准评估规则,会自动从当前行分组中取数
  • 所有在mutate/filter等dplyr动词内的计算,默认都会使用data mask机制,优先读取当前分组内的列值,而非全局环境下的同名对象
对应使用限制说明

你遇到的是dplyr非标准评估的上下文适配问题:外部自定义的函数如果没有专门适配data mask,就无法自动识别当前分组的取值环境,只会从函数定义的环境(这里就是全局环境)找对应的对象,导致不符合预期的结果。
如果要在rowwise下实现动态列求和,正确的写法是:

df <- data.frame(x=1:10, y=21:30) 
l <- c('x', 'y')
df %>% 
  rowwise() %>% 
  mutate(presum = sum(c_across(all_of(l))))
可查阅的官方文档

不需要跳转外部网站,直接在R环境中运行以下命令即可获取官方说明:

  • 运行?dplyr::rowwise查看rowwise的完整用法、实现逻辑和常见用例
  • 运行?dplyr::c_across查看rowwise下动态选列的配套函数说明
  • 运行?dplyr::data_mask查看dplyr非标准评估的核心机制说明,解释列名自动识别的底层逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:06:03