R是否有相当于Python的"repr"(或Lisp的"prin1-to-string")?



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

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

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

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

请参阅评估包中的?evaluate

编辑:Poster后来在评论中澄清说,他想要重建对象的命令,而不是包含print(object)输出的字符串。在这种情况下,evaluate不是想要的,而是dput(正如Joshua Ullrich在评论中已经提到的,由于我发布了这篇文章,所以已经转移到了答案中),dump将起作用。CCD_ 11和CCD_ 12将至少在Windows上存储和复制经典图形。trellis.last.object将检索最后一个晶格图形对象。还要注意,.Last.value在交互控制台中保存最后一个值。

您可以使用capture.output:

repr <- function(x) {
  paste(sprintf('%sn', capture.output(show(x))), collapse='')
}

对于没有行号的版本,应该使用以下行的内容:

repr <- function(x) {
  cat(sprintf('%sn', capture.output(show(x))), collapse='')
}

我也有同样的问题。我想知道是不是有什么内置的东西,或者我是否需要自己写。我没有找到任何内置的东西,所以我写了以下函数:

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

最新更新