是否有可能在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()
功能类似。
答案 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"