R中的函数:使用list参数作为字符串

Tje*_*ebo 4 arguments r function

我正在编写一个使用list参数的函数.在这个函数中,我将列表转换为数据框使用stack().现在,我的问题是,如何使用函数参数中使用的列表名称重命名结果数据框(或任何其他数据框,如实际函数所需)的列?

我的功能:

stack_and_rename <- function(list) {

stacked_list <- stack(list)
names(stacked_list)[names(stacked_list)=='ind'] <- 'list' 
stacked_list

}
Run Code Online (Sandbox Code Playgroud)

虚拟列表:

fields <- list(A = c(2:4, 12:16, 24:28, 36:40, 48:49), 
           B = c(6:10, 18:22, 30:34, 42:46))
Run Code Online (Sandbox Code Playgroud)

但是调用stack_and_rename(fields) 显然会返回一个带有'values'和'list'列的数据框,尽管我想得到'values'和'fields'.我必须做一些引用错误,但我无法得到解决方案.谢谢!

akr*_*run 5

我们可以使用deparse(substitutebase R

stack_and_rename <- function(list) {
  nm1 <- deparse(substitute(list))
  stacked_list <- stack(list)
  names(stacked_list)[names(stacked_list)=='ind'] <- nm1
  stacked_list

}

stack_and_rename(fields)
Run Code Online (Sandbox Code Playgroud)

或者 dplyr

library(dplyr)
stack_and_rename <- function(list) {
   nm1 <- quo_name(enquo(list))
   stacked_list <- stack(list)
   stacked_list %>%
       rename_at(vars('ind'), funs(paste0(nm1)))
       #or
       #rename(!! nm1 := ind)


}


stack_and_rename(fields) %>% 
          names
#[1] "values" "fields"
Run Code Online (Sandbox Code Playgroud)