【发布时间】:2020-05-26 03:53:49
【问题描述】:
假设我有以下功能:
return_name <- function(data){
for(datasets in data)
print(deparse(substitute(datasets)))
}
my_data_1 <- data.frame(a = "a", b = "b")
my_data_2 <- data.frame(a = "a", b = "b")
return_name(list(my_data, my_data_2))
我希望这个函数能够打印my_data_1,后跟my_data_2(内存中对象的名称。
而是打印整个对象的结构。
编辑@Ronak
在我的实际代码中,我正在遍历数据框列表(不是命名列表)。我需要能够 grep 在 for 循环中的当前对象的名称上。
看起来像这样:
data_list = list(my_data_1, my_data_2)
random_function <- function(data_list){
for(datasets in data_list)
value = ifelse(grepl("my_data_1", return_name(datasets)), 1, 0)
}
问题是您的答案中描述的 return_name 函数将返回“数据集”,而不是实际的原始对象名称。
【问题讨论】:
-
return(names(data))是return_name的全部有什么问题?还是只使用names开头? -
不是命名列表,所以会返回
NULL -
哦,我明白了。我认为您想要的是
match.call来提取对函数的原始调用,然后您可以根据需要解析参数。就个人而言,我不赞同这一点,因为如果您在函数内部或外部定义列表,您将获得不同的功能,但每个人都有自己的。 -
当您传递
data_list时,它没有关于my_data_1或my_data_2的信息。你能把它做成一个命名列表吗?data_list = list(my_data_1 = my_data_1, my_data_2 = my_data_2) -
嗯,是的,我希望有办法以某种方式恢复原始名称。如果需要命名列表,我可以将其设为命名列表。原始代码库使用未命名的列表,所以我试图在其中工作。
标签: r