我偶尔会发现将R对象的打印表示形式作为字符串(如Python的repr
函数或Lisp的prin1-to-string
)会很有用。 R中是否存在这样的功能?我不需要它来处理复杂或奇怪的对象,只需要简单的向量和列表。
编辑:我想要在控制台中键入的字符串生成相同的对象,而不是print(object)
的输出。
答案 0 :(得分:16)
我不熟悉您列出的Python / Lisp函数,但我认为您需要dput
或dump
。
x <- data.frame(1:10)
dput(x)
dump("x", file="clipboard")
答案 1 :(得分:6)
请参阅评估包中的?evaluate
。
编辑:海报后来在评论中澄清说他想要重建对象的命令而不是保持print(object)
输出的字符串。在这种情况下,evaluate
不是我想要的,而是dput
(正如Joshua Ullrich在评论中已经提到的那样,因为我发布的内容已转移到答案中)dump
将起作用。 recordPlot
和replayPlot
将至少在Windows上存储和重新绘制经典图形。 trellis.last.object
将检索最后一个图形图形对象。另请注意,.Last.value
保存交互式控制台的最后一个值。
答案 2 :(得分:1)
您可以使用capture.output
:
repr <- function(x) {
paste(sprintf('%s\n', capture.output(show(x))), collapse='')
}
对于没有行号的版本,这些行应该有效:
repr <- function(x) {
cat(sprintf('%s\n', capture.output(show(x))), collapse='')
}
答案 3 :(得分:1)
我有完全相同的问题。我想知道是否有内置的东西,或者我是否需要自己编写。我没有找到任何内置函数,所以我编写了以下函数:
dputToString <- function (obj) {
con <- textConnection(NULL,open="w")
tryCatch({dput(obj,con);
textConnectionValue(con)},
finally=close(con))
}
dgetFromString <- function (str) {
con <- textConnection(str,open="r")
tryCatch(dget(con), finally=close(con))
}
我认为这可以满足您的需求。这是一个测试:
> rep <- dputToString(matrix(1:10,2,5))
> rep
[1] "structure(1:10, .Dim = c(2L, 5L))"
> mat <- dgetFromString(rep)
> mat
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10