保存对象的结构

时间:2015-11-25 21:33:34

标签: r

是否有可能在R中对一个对象的结构进行串行化。通过串行化我的意思是类似于utils::str()base::structure()函数。这些函数非常好用,但它们只是打印结构而没有选择将它分配给变量。

我尝试使用递归(只是为了获取类)来做到这一点:

x <- list("aaa",
          c("asd", "test", "asdfre"),
          b = list("bbbb"),
          c1 = as.list(c("l1", "l2")),
          c = list("aaa", 
                   b = "bbbbb", 
                   list("aaa", 
                        s = c(123, 122)), 
                   l = list(a = list("aa", 
                                     "bb"), 
                            b = c(12, 123))))




getStructure <- function(x){
  if(!is.list(x)){
    return(list(class(x)))
  } else{
      sapply(x, function(x) { if(!is.null(x)) getStructure(x) })
  }
}

getStructure(x)

但它的工作方式与str()structure()功能类似。

2 个答案:

答案 0 :(得分:3)

capture.output是获取通常打印到控制台的任何内容的一般方法。

x = capture.output(str(mtcars))

答案 1 :(得分:1)

你想要完成什么?您需要以某种文本格式发送数据吗?如果不是 - 如果您只需要将对象保存到磁盘以便以后可以将其加载到R中 - 那么您可以使用save

foo <- list(x=c(1, 2, 3), y=c("a", "b", "c"))
save(foo, file="foo.rdata")

现在退出R并重新启动它。

load("foo.rdata")
foo
; $x
; [1] 1 2 3
;
; $y
; [1] "a" "b" "c"