如何在R语言的lapply中获取传入参数的变量全名?
在lapply中获取数据框变量全名的解决方法
因为lapply遍历数据框列时,会把每一列转为独立向量传递给函数,deparse(substitute(x))只能捕获lapply内部的临时变量名(比如X[[i]]),无法拿到原始的df$a这类全名,你可以用以下几种方式解决:
方法一:遍历列名而非列本身
直接循环数据框的列名,再结合数据框名称拼接出全名:
# 示例数据框 df <- data.frame(a = 1:3, b = 4:6) # 自定义函数 get_full_name <- function(col_name, df) { # 拼接数据框名和列名 full_name <- paste0(deparse(substitute(df)), "$", col_name) # 这里可以添加你的业务逻辑 return(full_name) } # 用lapply遍历列名 lapply(names(df), get_full_name, df = df)
运行后会返回["df$a", "df$b"],符合预期。
方法二:使用purrr包的imap函数
imap会同时传递列的值和列名,写法更简洁:
library(purrr) df <- data.frame(a = 1:3, b = 4:6) get_full_name <- function(x, col_name) { full_name <- paste0(deparse(substitute(df)), "$", col_name) return(full_name) } imap(df, get_full_name)
方法三:用base R的mapply配合列名
mapply可以同时传递列值和列名,无需额外遍历列名:
df <- data.frame(a = 1:3, b = 4:6) mapply(function(x, col_name) { full_name <- paste0(deparse(substitute(df)), "$", col_name) return(full_name) }, df, names(df))
内容的提问来源于stack exchange,提问作者Kaikus
相关产品推荐
相关产品推荐

