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

如何在R的map()中按推荐方式传递参数调用函数?

解决map()函数用法错误的问题

你的错误原因很明确:map()的第一个参数必须是要迭代的向量,而你后来的代码里只传入了匿名函数,漏掉了这个核心参数,导致R把匿名函数当成了要迭代的对象,所以报错说.x是函数而非向量。

正确写法示例

写法1:沿用外部向量file_names

保持第一个参数为file_names,匿名函数用x指代每个文件名元素:

library(tidyverse)

file_names <- c("filename1", "filename2", "filename3")

data <- data_frame(filename = file_names) %>%
  mutate(content = map(file_names, \(x) read_tsv(x, skip = 1, col_names = FALSE)))

写法2:推荐使用数据框内的filename列(更符合tidyverse风格)

在mutate()中直接引用当前数据框的filename列作为迭代对象,这样如果后续对数据框做过滤、排序等操作,能保证迭代的是当前行对应的文件名:

data <- data_frame(filename = file_names) %>%
  mutate(content = map(filename, \(x) read_tsv(x, skip = 1, col_names = FALSE)))

写法3:用波浪号~简化匿名函数

tidyverse支持用~代替\(x),用.x指代迭代元素,代码更简洁:

data <- data_frame(filename = file_names) %>%
  mutate(content = map(filename, ~read_tsv(.x, skip = 1, col_names = FALSE)))

补充说明

map()的标准语法是map(.x, .f, ...):

  • .x:要迭代的向量/列表
  • .f:应用在每个元素上的函数(可以是匿名函数,也可以是已命名函数)
  • ...:传递给.f的额外参数

你最初的正确代码map(file_names, read_tsv)其实是省略了匿名函数的简写形式,当read_tsv的第一个参数正好是.x的元素时,可以直接传入函数名;但需要添加额外参数时,必须显式写出匿名函数来指定参数对应关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:32:40