我偶尔会发现将 R 对象的打印表示形式获取为字符串会很有用,例如 Python 的repr
函数或 Lisp 的prin1-to-string
. R中是否存在这样的功能?我不需要它来处理复杂或奇怪的对象,只需要简单的向量和列表。
编辑:我想要我必须在控制台中输入的字符串来生成一个相同的对象,而不是print(object)
.
我偶尔会发现将 R 对象的打印表示形式获取为字符串会很有用,例如 Python 的repr
函数或 Lisp 的prin1-to-string
. R中是否存在这样的功能?我不需要它来处理复杂或奇怪的对象,只需要简单的向量和列表。
编辑:我想要我必须在控制台中输入的字符串来生成一个相同的对象,而不是print(object)
.
我不熟悉您列出的 Python/Lisp 函数,但我认为您想要dput
或dump
.
x <- data.frame(1:10)
dput(x)
dump("x", file="clipboard")
见?evaluate
评估包。
编辑:海报后来在评论中澄清说,他想要重建对象的命令,而不是保存print(object)
输出的字符串。在那种情况下evaluate
,不是想要的,而是dput
(正如Joshua Ullrich在评论中已经提到的,因为我发布了已经转移到答案)并且dump
会起作用。 recordPlot
并将replayPlot
至少在 Windows 上存储和重新绘制经典图形。trellis.last.object
将检索最后一个格子图形对象。另请注意,.Last.value
在交互式控制台中保留最后一个值。
我有完全相同的问题。我想知道是否为此内置了某些东西,或者我是否需要自己编写。我没有找到任何内置的,所以我编写了以下函数:
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
您可以使用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='')
}