Предположите, что у Вас есть объект 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
Однако существует ли лучший способ сделать это?
Предполагая, что в 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)
...
Как вы можете прочитать в ? 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"
ну, я знаю функцию, которая избавляет от необходимости делать это (т.е. находить имя объекта в бинарном файле 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' для удаления объекта