如何使用R的可变参数...批量创建指定名称与列名的dataframe
错误原因
你出现报错是因为R不支持直接遍历...、直接将...作为变量名或列名使用,属于语法层面的上下文错误。
正确实现(Base R 无依赖版本)
无需安装额外包,直接运行即可:
create_df <- function(...) { # 捕获传入的参数作为数据框名称 df_names <- as.character(match.call(expand.dots = FALSE)$`...`) for (name in df_names) { # 生成数据框并动态修改第一列名称 df <- data.frame( tmp = c(1,2,3,4), column2 = c(1,2,3,4) ) colnames(df)[1] <- name # 将生成的数据框赋值到全局环境,函数运行后可直接调用 assign(name, df, envir = .GlobalEnv) } }
调用create_df(hello, world)后,全局环境将生成hello和world两个数据框,完全符合需求:每个数据框第一列名与数据框名一致,取值为c(1,2,3,4),第二列固定为column2,取值为c(1,2,3,4)。
Tidyverse 风格实现(需安装rlang、purrr包)
如果习惯tidyverse语法,可以用符号插值的方式实现更简洁的写法:
library(rlang) library(purrr) create_df <- function(...) { # 捕获传入的参数符号 df_syms <- ensyms(...) walk(df_syms, ~{ name <- as_name(.x) # 用!!和:=实现动态列名 df <- tibble(!!name := c(1,2,3,4), column2 = c(1,2,3,4)) assign(name, df, envir = .GlobalEnv) }) }
内容的提问来源于stack exchange,提问作者moth
相关产品推荐
相关产品推荐

