R是否具有Python的“repr”(或Lisp的“prin1-to-string”)?

时间:2012-04-02 19:53:15

标签: string r representation

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

编辑:我想要在控制台中键入的字符串生成相同的对象,而不是print(object)的输出。

4 个答案:

答案 0 :(得分:16)

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

x <- data.frame(1:10)
dput(x)
dump("x", file="clipboard")

答案 1 :(得分:6)

请参阅评估包中的?evaluate

编辑:海报后来在评论中澄清说他想要重建对象的命令而不是保持print(object)输出的字符串。在这种情况下,evaluate不是我想要的,而是dput(正如Joshua Ullrich在评论中已经提到的那样,因为我发布的内容已转移到答案中)dump将起作用。 recordPlotreplayPlot将至少在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