R是否与Python';s";“报告”;(或Lisp&x27;s";prin1 to string";)?

R是否与Python';s";“报告”;(或Lisp&x27;s";prin1 to string";)?,string,r,representation,String,R,Representation,我偶尔会发现,将R对象的打印表示形式作为字符串是有用的,比如Python的repr函数或Lisp的prin1 to string。R中是否存在这样的函数?我不需要它来处理复杂或奇怪的对象,只需要简单的向量和列表 编辑:我想要在控制台中键入的字符串来生成相同的对象,而不是print(object)的输出 您可以使用capture.output: repr <- function(x) { paste(sprintf('%s\n', capture.output(show(x))), co

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


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

您可以使用
capture.output

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

repr参见评估包中的
?评估


编辑:Poster后来在评论中澄清,他想要的是能够重构对象的命令,而不是保存
打印(对象)
输出的字符串。在这种情况下,
evaluate
不是想要的,而是
dput
(正如我在评论中已经提到的,因为我已经发布了一个答案),并且
dump
将起作用
recordPlot
replayPlot
将至少在Windows上存储并重新打印经典图形<代码>网格.last.object
将检索最后一个晶格图形对象。还要注意,
.Last.value
保存交互控制台上的最后一个值。

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

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

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

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))
}

dputToString可能您正在寻找
dput
?R中的大多数对象都有一个默认的打印方法,如果您只需在命令行上调用它们,它就会执行您所要求的操作
>x
@Justin,我的意思是我想要在R控制台中键入的表示来构造对象,就像Python中的
repr
一样(对于受支持的对象)。只需使用
cat
而不是隐式打印结果。这应该可以去掉行号。我不想要打印(对象)
的输出,我想要创建对象时输入的字符串。是的,dump/dput看起来像是我想要的那样。谢谢。这对简单的R对象(向量、矩阵、数据帧、这些东西的列表、S4类)有效,但对环境和任何包含环境的对象(闭包、包含环境元素的列表)无效,也可能对其他更复杂的类无效。
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