R语言使用purrr::map_dfr报错Error: Argument 1 must have names原因求解
报错含义说明
你遇到的"Error: Argument 1 must have names."报错翻译为:错误:第1个参数必须包含列名。
报错触发原因
purrr::map_dfr的功能是将每次迭代返回的结果按行拼接为统一的dataframe,要求每次迭代的返回值是带有列名的dataframe/tibble结构。你自定义的func函数仅返回了sort()处理后的一维向量,没有绑定列名,也没有封装为表格结构,map_dfr无法完成拼接逻辑,因此触发该报错。
此外你当前的代码逻辑也不符合需求:你只对synergytst单列做了排序,没有保留原数据集的其他列,也没有将排序后的列回填到原数据集中。
修正方案
根据你的实际需求选择对应方案:
方案1:保留所有列,按时间列排序后合并为总表
如果需要保留每个csv的全部字段,仅按synergytst升序排列后合并为一个大表,使用如下代码:
library(tidyverse) temp = list.files(pattern="*.csv") myfiles = lapply(temp, read.csv) func <- function(x){ # 按synergytst列升序排序,保留原表所有列 arrange(x, synergytst, .by_group = FALSE) } result <- purrr::map_dfr(myfiles, func)
方案2:仅提取排序后的时间列合并为总表
如果只需要把所有数据集排序后的synergytst列汇总为一张表,使用如下代码:
library(tidyverse) temp = list.files(pattern="*.csv") myfiles = lapply(temp, read.csv) func <- function(x){ # 将排序后的向量封装为带列名的tibble tibble(synergytst = sort(x$synergytst, na.last = TRUE)) } result <- purrr::map_dfr(myfiles, func)
内容的提问来源于stack exchange,提问作者magic w
相关产品推荐
相关产品推荐

