Как искать среду, используя ls () внутри функции? - PullRequest
8 голосов
/ 16 ноября 2011

Я хочу найти набор функций и сохранить их, потому что я хочу отправить их на удаленный сервер в файле Rdata и не хочу устанавливать новый пакет на сервере.

Несмотря на то, что я получаю сообщение об ошибке, используя приведенный ниже подход, более простые / лучшие подходы приветствуются.

MWE:

Вот две фиктивные функции:

abcd.fun.1    <- function() return(1)
abcd.fun.2    <- function() return(2)

Я могу определить фиктивные функции:

ls()[grep('abcd', ls())]

Но когда я заключаю это в функцию:

 find.test <- function(x) {
     return(ls()[grep(x, ls())])
 }
 find.test('abcd')

Функция возвращает character(0)

В конечном итоге я хотел бы

 save(find.test('abcd'), file = test.Rdata)

Ответы [ 2 ]

10 голосов
/ 16 ноября 2011
  1. Почему бы не использовать аргумент pattern= для ls?
  2. Вызов ls внутри функции выводит список объектов, которые существуют внутри область действия функции , а не глобальная среда (это объясняется в ?ls).

Если вы хотите вывести список объектов в глобальной среде из функции, укажите envir=.GlobalEnv.

x <- 1:10
f <- function() ls()
g <- function() ls(envir=.GlobalEnv)
h <- function() ls(envir=.GlobalEnv, pattern="[fg]")
f()
# character(0)
g()
# [1] "f" "g" "h" "x"
h()
# [1] "f" "g"
7 голосов
/ 16 ноября 2011

Вы должны указать своей функции перечислять объекты в среде, отличной от себя, например, глобальная среда. (И пока вы это делаете, вы также можете указать шаблон регулярного выражения в качестве аргумента ls.):

find.test <- function(x, envir=.GlobalEnv) {
  ls(pattern=x, envir=envir) 
}

См. ?ls для получения дополнительной информации о ls() и ?environment для других опций для указания среды.

...