8

我偶尔会发现将 R 对象的打印表示形式获取为字符串会很有用,例如 Python 的repr函数或 Lisp 的prin1-to-string. R中是否存在这样的功能?我不需要它来处理复杂或奇怪的对象,只需要简单的向量和列表。

编辑:我想要我必须在控制台中输入的字符串来生成一个相同的对象,而不是print(object).

4

4 回答 4

17

我不熟悉您列出的 Python/Lisp 函数,但我认为您想要dputdump.

x <- data.frame(1:10)
dput(x)
dump("x", file="clipboard")
于 2012-04-02T21:12:04.973 回答
6

?evaluate评估包。

编辑:海报后来在评论中澄清说,他想要重建对象的命令,而不是保存print(object)输出的字符串。在那种情况下evaluate,不是想要的,而是dput(正如Joshua Ullrich在评论中已经提到的,因为我发布了已经转移到答案)并且dump会起作用。 recordPlot并将replayPlot至少在 Windows 上存储和重新绘制经典图形。trellis.last.object将检索最后一个格子图形对象。另请注意,.Last.value在交互式控制台中保留最后一个值。

于 2012-04-02T20:32:23.593 回答
2

我有完全相同的问题。我想知道是否为此内置了某些东西,或者我是否需要自己编写。我没有找到任何内置的,所以我编写了以下函数:

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
于 2015-03-03T01:42:30.263 回答
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='')
}
于 2012-04-02T20:15:16.660 回答