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

R语言中summarise函数内圆点(.)的含义及代码报错原因咨询

关于dplyr中summarise内圆点(.)的疑问与解答

问题场景

我尝试用dplyr给数据框df添加行总计,以下代码可以正常运行:

可正常运行的代码

library(tidyverse)

df <- df %>%
  bind_rows(summarise(., across(where(is.numeric), sum),
                                across(where(is.character), ~'Total')))

但当我去掉summarise内的圆点(.)后,代码报错:

报错的代码及错误信息

df <- df %>%
  bind_rows(summarise(across(where(is.numeric), sum),
                             across(where(is.character), ~'Total')))

# Error: `across()` must only be used inside dplyr verbs.

核心疑问

summarise内的圆点(.)指代什么?为何必须添加它才能正常运行?我猜测它指代df,但df已通过df %>%被隐含传递,现有资料没有解答这个问题。

解答

  1. 圆点(.)的含义:
    这里的.指代的是通过管道符%>%传递给bind_rows()的前序数据框df。

  2. 必须添加的原因:
    管道符%>%的默认规则是把左侧对象传递给右侧函数的第一个参数。在你的代码里,bind_rows()的第一个参数就是管道传过来的df,而summarise()是作为bind_rows()的第二个参数存在的——管道不会自动把df传递给summarise(),所以summarise()默认找不到要处理的数据对象。

当你在summarise()里加上.,就是显式告诉它:要处理的数据是管道传过来的df。如果去掉.,summarise()没有明确的操作对象,相当于空执行,而across()必须依附于有明确目标数据框的dplyr动词才能工作,因此就会抛出报错。

简单来说:管道把df传给了bind_rows(),但不会自动传给bind_rows()内部的summarise(),必须用.显式引用,让summarise()知道要对哪个数据做汇总计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:30:58