una tabla importar exportar desde datos crear como cargar archivos archivo abrir r object rdata

tabla - Obtiene un objeto específico del archivo Rdata



exportar a excel desde r (3)

Tengo un archivo Rdata que contiene varios objetos:

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

Por supuesto, puedo cargar el marco de datos con load(''New.Rdata'') , sin embargo, ¿hay alguna manera inteligente de cargar solo un objeto específico de este archivo y descartar los otros?


La respuesta de Simon Urbanek es muy, muy agradable. Un inconveniente es que no parece funcionar si un objeto que se va a guardar es demasiado grande:

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

Supongo que esto se debe a una limitación de la implementación actual de R (tengo 2.15.2) en lugar de quedarse sin memoria física e intercambio. Sin embargo, el paquete de saves podría ser una alternativa para algunos usos.


Los archivos .RData no tienen un índice (los contenidos se serializan como una gran pairlista). Podría hackear una forma de ir a través de la nave y asignar solo las entradas que desee, pero no es fácil, ya que no puede hacerlo en el nivel R.

Sin embargo, simplemente puede convertir el archivo .RData en una base de datos de carga diferida que serializa cada entrada por separado y crea un índice. Lo bueno es que la carga será a pedido:

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

Cargar el DB solo carga el índice pero no los contenidos. Los contenidos se cargan a medida que se utilizan:

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

Al igual que con load() , puede especificar un entorno para cargar, por lo que no necesita contaminar el espacio de trabajo global, etc.


Puede usar attach lugar de load lo que adjuntará el objeto de datos a la ruta de búsqueda, luego puede copiar el objeto que le interesa y separar el objeto .Rdata.

Esto todavía carga todo, pero es más fácil trabajar que cargar todo en el espacio de trabajo global (posiblemente sobrescribiendo cosas que no desea sobreescribir) y luego deshacerse de todo lo que no desea.