Как получить исходное имя объекта при отправке списка объектов в функцию - PullRequest
0 голосов
/ 26 мая 2020

Допустим, у меня есть следующая функция:

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 l oop.

Это выглядит примерно так:

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, описанная в вашем ответе, вернет «наборы данных», а не фактическое исходное имя объекта.

1 Ответ

1 голос
/ 26 мая 2020

Это своего рода взлом:

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...