Получить определенный объект из файла Rdata

У меня есть файл Rdata содержащий различные объекты:

  New.Rdata |_ Object 1 (eg data.frame) |_ Object 2 (eg matrix) |_... |_ Object n 

Конечно, я могу загружать фрейм данных с load('New.Rdata') , однако есть ли у вас умный способ загрузить только один конкретный объект из этого файла и отбросить остальные?

3 Solutions collect form web for “Получить определенный объект из файла Rdata”

.RData файлы не имеют индекса (содержимое сериализуется как один большой парный список). Вы можете взломать способ пройти через список пар и назначить только нужные вам записи, но это непросто, так как вы не можете сделать это на уровне R.

Однако вы можете просто преобразовать файл .RData в базу данных с ленивой загрузкой, которая сериализует каждую запись отдельно и создает индекс. Приятно, что загрузка будет по требованию:

 # convert .RData -> .rdb/.rdx e = local({load("New.RData"); environment()}) tools:::makeLazyLoadDB(e, "New") 

Загрузка DB затем загружает только индекс, но не содержимое. Содержимое загружается по мере их использования:

 lazyLoad("New") ls() x # if you had x in the New.RData it will be fetched now from New.rdb 

Как и при load() вы можете указать среду для загрузки, чтобы не загрязнять глобальное рабочее пространство и т. Д.

Вы можете использовать attach а не load которая привяжет объект данных к пути поиска, затем вы можете скопировать один объект, который вас интересует, и отсоединить объект .Rdata.

Это все еще загружает все, но проще работать, чем загружать все в глобальную рабочую область (возможно, перезаписывать вещи, которые вы не хотите перезаписывать), а затем избавляться от всего, чего вы не хотите.

Ответ Саймона Урбанека очень, очень приятный. Недостатком является то, что он не работает, если объект, который нужно сохранить, слишком велик:

 tools:::makeLazyLoadDB( local({ x < - 1:1e+09 cat("size:", object.size(x) ,"\n") environment() }), "lazytest") size: 4e+09 Error: serialization is too large to store in a raw vector 

Я предполагаю, что это связано с ограничением текущей реализации R (я имею 2.15.2), а не заканчивая физической памятью и свопом. Однако пакет сохранения может быть альтернативой для некоторых видов использования.

  • Местоположение Услуги, не работающие в iOS 8
  • Получение ключей NSDictionary, отсортированных по их соответствующим значениям
  • Создание имени переменной с использованием значения String
  • Что такое classы, ссылки и объекты?
  • Проверка наличия вложенного объекта объекта JavaScript
  • Как сериализовать объект в формате строки запроса?
  • C #: печать всех свойств объекта
  • Почему нет classа java.lang.Array? Если java-массив является объектом, не должен ли он расширять Object?
  • NSString для CFStringRef и CFStringRef для NSString в ARC?
  • Как вызвать метод Scala Object с использованием отражения?
  • Рендеринг свойств объекта в реактиве
  • Interesting Posts

    Ошибка Webkit с `: hover` и несколькими соседними селекторами

    Недопустимый class запуска OWIN

    Преобразование String для двойного использования в Java

    Java: Как запустить автономное приложение из текущего, когда оба находятся в одном пакете?

    Можно ли удалить URL-адрес из моего css-файла печати, чтобы веб-адрес не печатался?

    Разделитель Android / разделитель линии в макете?

    Как получить имя переменной с помощью отражения?

    Как установить порядок подключения Wi-Fi в Windows 10?

    Как решить class исключения COM Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))?

    Пользовательский текст UINavigationController “назад”?

    Почему попытка {…} наконец {…} хорошая; try {…} catch {} bad?

    CryptographicException «Keyset не существует», но только через WCF

    Перенос из Oracle в MySQL

    Как получить Likes Count при поиске Facebook Graph API с помощью поиска = xxx

    Регулярное выражение для принудительного применения сложных паролей, соответствующих 3 из 4 правил

    Давайте будем гением компьютера.