определение названия объекта, загруженного в R

Предположите, что у Вас есть объект foo то, что Вы сохранили как saved.file.rda следующим образом:

foo <- 'a'
save(foo, file='saved.file.rda')

Предположим, что Вы загружаетесь saved.file.rda в среду с несколькими объектами, но забыл название объекта, который находится в saved.file.rda. Существует ли путь в R для определения того имени?

Можно сделать это следующий путь, который кажется немного неуклюжим:

bar <- load('saved.file.rda')
eval(parse(text=bar)) # this will pull up the object that was in saved.file.rda

Однако существует ли лучший способ сделать это?

13
задан andrewj 26 March 2010 в 02:15
поделиться

3 ответа

Предполагая, что в saved.file.rda сохранен только один объект, примерно:

bar <- load('saved.file.rda')
the.object <- get(bar)

или просто:

bar <- get(load('saved.file.rda'))

Если вы хотите быть "аккуратным" и не загрязнять ваше глобальное рабочее пространство тем, что вы загрузили (и забыли название), вы можете загрузить ваш объект в окружение и указать это окружение в вызове get.

Возможно:

temp.space <- new.env()
bar <- load('saved.file.rda', temp.space)
the.object <- get(bar, temp.space)
rm(temp.space)
...
19
ответ дан 1 December 2019 в 20:56
поделиться

Как вы можете прочитать в ? Load , вы можете загружать данные в указанную среду. Затем вы можете использовать get и ls , чтобы получить то, что вы хотите:

tmp_env <- new.env()
load('saved.file.rda', tmp_env)
get(ls(tmp_env), envir=tmp_env) # it returns only first object in environment
# [1] "a"
5
ответ дан 1 December 2019 в 20:56
поделиться

ну, я знаю функцию, которая избавляет от необходимости делать это (т.е. находить имя объекта в бинарном файле R, который вы только что загрузили) - другими словами, вы можете использовать эту технику для загрузки бинарных файлов R вместо 'load':

file_path = "/User/dy/my_R_data/a_data_set.RData"
attach(file_path, pos=2, name=choose_a_name, warn.conflict=T)
  • 'warn.conflicts=T' - по умолчанию опция

  • 'pos=2' также используется по умолчанию; "2" означает позицию в вашем поисковом пути. Например, позиция 1 - это ".GlobalEnv.". Чтобы получить весь массив путей поиска, используйте search(). Таким образом, вы получите доступ к пути поиска для нового объекта с помощью search()[2]

  • используйте 'detach' для удаления объекта

4
ответ дан 1 December 2019 в 20:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: