有一些简单的解决方案,例如:
> 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
}
请记住,输入的一些数字......并没有带名字属性。这可能是我想在输出数据框中将其环境名称用作列名的全部原因。
答案 0 :(得分:0)
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中指出我通过搜索找不到的解决方案。