R:变量名到字符串

时间:2014-06-10 12:39:14

标签: string r variables

有一些简单的解决方案,例如:

> deparse(substitute(data))
[1] "data"

但是,当我想从列表中提取名称时,它并不常用:

> deparse(substitute(names(data)[1]))
[1] "names(data)[1]"

所以问题是我想把它作为列表/数据框/数字中每个变量的通用解决方案,我将其输入到某个函数中。我希望将这些变量的名称视为输出数据框的列名。

如:

foo <- function(...) { 
   data <- list(...)
## some magic here ##
   names(output_df) <- ?? 
   output_df
}

请记住,输入的一些数字......并没有带名字属性。这可能是我想在输出数据框中将其环境名称用作列名的全部原因。

1 个答案:

答案 0 :(得分:0)

显然,&#34; ??&#34;以上问题应替换为:

setdiff(as.character(match.call(expand.dots=TRUE)), 
        as.character(match.call(expand.dots=FALSE)))

完全展开的例子:

num_vec <- as.numeric(1:10)
list1 <- 1:10
list2 <- 11:20
list_data <- list(list1, list2)
df_data <- data.frame(list1, list2)

foo <- function(...) {
  input_list <- list(...)
  name_vec <- setdiff(as.character(match.call(expand.dots=TRUE)), 
                      as.character(match.call(expand.dots=FALSE)))
  output_df <- list()
  for(i in 1:length(input_list)) {
    output_df <- c(output_df, input_list[i])
  }
  output_df <- data.frame(output_df)
  names(output_df) <- name_vec
  output_df
}

foo(num_vec, list_data[[1]], df_data[[1]], df_data$list2)

   num_vec list_data[[1]] df_data[[1]] df_data$list2
1        1              1            1            11
2        2              2            2            12
3        3              3            3            13
4        4              4            4            14
5        5              5            5            15
6        6              6            6            16
7        7              7            7            17
8        8              8            8            18
9        9              9            9            19
10      10             10           10            20

这是我的意图 - 从任何类型的源获取数据,使用它进行一些操作(未在示例中显示,因为它与问题无关)并获得数据框作为输出,列名完全如下作为变量出现在函数中。

感谢Peyton在other post中指出我通过搜索找不到的解决方案。