Определение имени объекта, загруженного в 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

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

Ответы

Ответ 1

Предполагая, что в 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)
...

Ответ 2

Как вы можете прочитать в ?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"

Ответ 3

Ну, я знаю функцию, которая устраняет необходимость сделать это (т.е. найти имя объекта в бинарном файле 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." Чтобы получить весь массив путей поиска, используйте поиск(). Так вы получите доступ к пути поиска для новый объект по поиску() [2]

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