Меня интересует перечисление объектов в файле RDATA и загрузка только выбранных объектов, а не всего набора (в случае, если некоторые из них могут быть большими или уже могут существовать в среде). Я не совсем понимаю, как это сделать, когда в именах есть конфликты, так как attach()
работает не так хорошо.
1: Для проверки содержимого файла данных R без его загрузки: Этот вопрос похож, но отличается от вопроса, заданного на с перечислением содержимого файла данных R без загрузки
В этом случае предлагаемое решение было:
attach(filename)
ls(pos = 2)
detach()
Если существуют конфликты именования между объектами в файле и объектами в глобальной среде, появляется это предупреждение:
The following object(s) are masked _by_ '.GlobalEnv':
Я пытался создать новую среду, но я не могу присоединиться к этому.
Например, это приводит к той же ошибке:
lsfile <- function(filename){
tmpEnv <- new.env()
evalq(attach(filename), envir = tmpEnv)
tmpls <- ls(pos = 2)
detach()
return(tmpls)
}
lsfile(filename)
Возможно, я напутал с evalq
(или eval
). Есть ли другой способ избежать конфликта имен?
2: Если я хочу получить доступ к объекту - если нет конфликтов имен, я могу просто поработать с объектом из файла .rdat или скопировать его в новый. Если есть конфликты, как получить доступ к объекту в пространстве имен файла?
Например, если мой файл - "sample.rdat", а объект - surveyData, а объект surveyData уже существует в глобальной среде, то как я могу получить к нему доступ из пространства имен file:sample.rdat
?
В настоящее время я решаю эту проблему, загружая все во временную среду, а затем копирую все, что нужно, но это неэффективно.