Возврат всех объектов, созданных в функции

#r #function #output

Вопрос:

Я хочу написать функцию, которая возвращает список всех (внутренне сгенерированных) объектов. Я попытался использовать ls() %gt;% mget() или get , но я получаю ошибку Error: value for ‘xxx’ not found . Я почти уверен, что проблемы связаны с аргументами pos / environment , но я не могу найти решение. Вот мой код:

 library(magrittr)  types lt;- c("Mouse", "Cage", "Mating") %gt;% magrittr::set_names(., .)  tmp1 lt;- types %gt;%   lapply(function(type) list(type = type)) %gt;%   lapply(function(lst) {  type lt;- lst$type  regex lt;- paste0("prefix_", type, "_suffix")  ls() %gt;% mget()  })  tmp2 lt;- types %gt;%   lapply(function(type) list(type = type)) %gt;%   lapply(function(lst) {  type lt;- lst$type  regex lt;- paste0("prefix_", type, "_suffix")  ls() %gt;% lapply(get)  })  tmp3 lt;- types %gt;%   lapply(function(type) list(type = type)) %gt;%   lapply(function(lst) {  type lt;- lst$type  regex lt;- paste0("prefix_", type, "_suffix")  list(  type = type,  regex = regex  )  })  

tmp3 дает желаемый результат. Однако я не хочу, чтобы мне приходилось редактировать list(...) раздел каждый раз, когда я изменяю функцию для создания дополнительных промежуточных объектов. Спасибо.

Комментарии:

1. Что-то в форме mget(grep("type",ls(),value = TRUE)) вернет список объектов, соответствующих шаблону регулярного выражения, это то, к чему вы стремитесь?

2. Возможно, попробуем types %gt;% lapply(function(type) { regex lt;- paste0("prefix_", type, "_suffix"); mget(ls()) })

3. измените ls()%gt;%mget() на mget(ls()) Я не могу сказать, почему первое не работает

4. @Josh — похоже, так оно и есть. Использование ls() %gt;% mget(inherits = TRUE) или ls() %gt;% mget(envir = parent.frame()) и то, и другое работает.

5. Если вы хотите проложить трубу, базовая труба работает нормально ls() |gt; mget() (потому что это просто синтаксический сахар, не нужно возиться со средой).