有没有办法以明确和人类可读的方式显示R对象的完整内部结构?
str
函数并不完全这样做,因为它显示了自定义表示。例如,将它应用于igraph对象会产生类似
IGRAPH U--- 3 3 -- Full graph
+ attr: name (g/c), loops (g/x)
+ edges:
[1] 1--2 1--3 2--3
这很好看且可读,但它特定于igraph对象(很明显它使用自定义格式)。我正在寻找一般的东西。我找到了dput
,有一段时间我认为这提供了完整的信息。相同的igraph对象显示为
structure(list(3, FALSE, c(1, 2, 2), c(0, 0, 1), c(0, 1, 2),
c(0, 1, 2), c(0, 0, 1, 3), c(0, 2, 3, 3), list(c(1, 0, 1),
structure(list(name = "Full graph", loops = FALSE), .Names = c("name",
"loops")), list(), list())), class = "igraph")
但后来我读到了R语言定义中的pairlists,我注意到dput(pairlist(1,2))
给出了list(1,2)
。我们从一个骑行者开始的信息消失了。
那么有类似dput
的东西显示R对象的内部结构并提供完整的信息吗? (我想要的主要原因是它可以帮助我更好地理解R对象的结构。)
如果没有,我将如何查询R对象以获取有关它的足够信息(以人类可读的方式 - 不是机器可读的)以便能够完全重建它?
答案 0 :(得分:8)
除了我的评论之外,我没有太多要补充的内容,所以这只是为了后代的完整性:)
dput
做你想做的事。除了极少数例外,其中一个是pairlist
(我假设可能还有其他例外,但我实际上并不知道它们是什么),它不会是完全相同的对象,但是,至少在pairlist
的情况是有原因的。由于pairlist
不应该在内部代码之外使用,因此dput
的输出可以被视为通过将内部对象转换为等效项来帮助用户外在的。
答案 1 :(得分:2)
dput
是一个有点令人失望的解决方案,因为结果非常混乱。 (但是,它比我以前做的更好。)
我建议(1)dput
,(2)制作副本,(3)将基类分配给结果(如dput
中所示)和(4){{ 1}}它。
在这种情况下:
str