Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 向函数发送对象列表时如何获取对象的原始名称_R - Fatal编程技术网

R 向函数发送对象列表时如何获取对象的原始名称

R 向函数发送对象列表时如何获取对象的原始名称,r,R,假设我有以下功能: 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)) 问题是答案中

假设我有以下功能:

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))

问题是答案中描述的return_name函数将返回“dataset”,而不是实际的原始对象名称

这是一种黑客行为:

return_name <- function(data){
   strsplit(gsub('list|[()]', '', deparse(substitute(data))), ',\\s*')[[1]]
}

return_name(list(my_data, my_data_2))
#[1] "my_data"   "my_data_2"
return_name(my_data_1)
#[1] "my_data_1"

return\u name非常感谢!这在您提供的上下文中起作用,但在我的实际代码中,我需要替换
print(deparse(replacement(datasets)))
行,因为它将位于一个for循环中,该循环正在迭代列表中的所有data.frames。如果我这样做:
return\u name\u 2
return(name(data))
作为整个
return\u name
有什么问题?或者仅仅使用
names
作为开始?它不是一个命名列表,因此将返回
NULL
哦,我明白了。我认为您需要的是
match.call
来提取对函数的原始调用,然后您可以根据需要解析参数。就个人而言,我并不赞同这一点,因为如果在函数内部或外部定义列表,您将获得不同的功能,但每个列表都有自己的功能。当您传递
数据列表时,它没有关于
我的数据列表1
我的数据列表2
的信息。你能把它列成一个名单吗<代码>数据列表=列表(my_data_1=my_data_1,my_data_2=my_data_2)
Hmm,是的,我希望有办法恢复原始名称。如果需要一个命名列表,我可以把它做成一个命名列表。最初的代码库使用未命名的列表,所以我尝试在其中工作。
return_name <- function(data){
   strsplit(gsub('list|[()]', '', deparse(substitute(data))), ',\\s*')[[1]]
}

return_name(list(my_data, my_data_2))
#[1] "my_data"   "my_data_2"
return_name(my_data_1)
#[1] "my_data_1"