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

使用purrr::pmap_dfr传入数据框时触发dplyr绑定错误的求助

问题分析与解决

错误根源

  • 语法错误:函数中period(theta + horizontal_shift)是把计算得到的数值period当作函数调用,属于语法错误,应改为乘法运算period * (theta + horizontal_shift)。
  • 返回值不符合要求:purrr::pmap_dfr要求每次调用传入的函数时,返回结果必须是数据框或命名原子向量。原函数返回单个未命名数值,导致dplyr::bind_rows无法将结果合并成数据框,从而抛出错误。错误信息中的"Argument 1"指的是函数返回的第一个结果,而非输入的argList。

修正后的代码

library(tidyverse)

thetas <- seq(from = -3, to = 3, by = 0.05) 
amplitudes <- rep(1, times = length(thetas))
period_denoms<- rep(1, times = length(thetas))
horizontal_shifts <- rep(0, times = length(thetas))
vertical_shifts <- rep(0, times = length(thetas))

argList <- list(thetas,
                amplitudes,
                period_denoms,
                horizontal_shifts,
                vertical_shifts) %>%
    as_tibble(.name_repair = ~ c("theta",
                                "amplitude",
                                "period_denom",
                                "horizontal_shift",
                                "vertical_shift")
                )

# 修复语法错误,返回数据框格式结果
xformed_sine <- function(theta, amplitude, period_denom, horizontal_shift, vertical_shift){
        period <- (2 * pi)/abs(period_denom)
        value <- amplitude * sinpi(period * (theta + horizontal_shift)) + vertical_shift
        tibble(theta = theta, sine_value = as.double(value))
}

# 运行pmap_dfr生成数据集
result <- pmap_dfr(argList, xformed_sine)
head(result)

另一种简化写法

如果不需要保留所有参数,也可以让函数返回命名向量,同样能被pmap_dfr处理:

xformed_sine <- function(theta, amplitude, period_denom, horizontal_shift, vertical_shift){
        period <- (2 * pi)/abs(period_denom)
        value <- amplitude * sinpi(period * (theta + horizontal_shift)) + vertical_shift
        c(theta = theta, sine_value = as.double(value))
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:24:57