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

R语言purrr包pmap报错:.z已定义却提示未找到,如何解决?

解决purrr::pmap()中".z not found"的错误

问题原因

你遇到的报错核心在于:pmap的lambda表达式(~语法)中,参数是按位置用..1、..2、..3引用的,而非.x/.y/.z。你在list()里给元素命名为.x/.y/.z只是给列表元素打了标签,但lambda函数并不会自动将这些标签识别为可用变量,因此调用.z时R找不到该对象。

解决方法

以下是几种无需修改make_chart函数参数定义的解决方案:

方案1:使用位置引用符..1/..2/..3

直接用位置序号对应列表中的元素,替换原来的.x/.y/.z:

pmap(list(mtcars %>% dplyr::select(matches(x_variables)),
          x_variables,
          mtcars %>% dplyr::select(mpg)),
     ~mtcars %>%
       make_chart(x = ..1, xtitle = ..2, y = ..3))

方案2:显式定义匿名函数参数

放弃~语法,改用function(.x, .y, .z)显式声明参数,这样就能直接使用你习惯的命名:

pmap(list(mtcars %>% dplyr::select(matches(x_variables)),
          x_variables,
          mtcars %>% dplyr::select(mpg)),
     function(.x, .y, .z) {
       mtcars %>% make_chart(x = .x, xtitle = .y, y = .z)
     })

方案3:给列表元素命名为make_chart的参数名

将list()中的元素命名为make_chart的参数名(除data外),lambda中直接使用对应名字:

pmap(list(x = mtcars %>% dplyr::select(matches(x_variables)),
          xtitle = x_variables,
          y = mtcars %>% dplyr::select(mpg)),
     ~mtcars %>%
       make_chart(x = x, xtitle = xtitle, y = y))

补充说明

pmap的.x/.y/.z是函数的参数名(用于接收输入列表),并非lambda内部的变量名。当使用~创建匿名函数时,R默认用..1(第一个输入)、..2(第二个输入)等作为位置参数的别名,这是你之前混淆的关键点。

内容的提问来源于stack exchange,提问作者J.Sabree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:14:56