определение имени объекта, загруженного в R - PullRequest
13 голосов
/ 26 марта 2010

Представьте, что у вас есть объект 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

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

Ответы [ 3 ]

19 голосов
/ 26 марта 2010

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

Как вы можете прочитать в ?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 голосов
/ 26 марта 2010

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

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 (). Так Вы получите доступ к пути поиска для новый объект при поиске () [2]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...