我偶尔发现获取R对象的打印表示作为字符字符串会很有用,就像Python的"repr"函数或Lisp的"prin1-to-string"函数一样。在R中是否存在这样的功能?我不需要它在复杂或奇怪的对象上工作,只需要在简单的向量和列表上工作。
编辑:我想要的是生成相同对象所需键入到控制台的字符串,而不是"print(object)"的输出。
编辑:我想要的是生成相同对象所需键入到控制台的字符串,而不是"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
将检索最后一个lattice图形对象。 还要注意, .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='')
}
cat
而不是隐式打印结果。这样就可以消除行号。 - Paul Hiemstraprint(object)
的输出,我想要创建该对象所需的字符字符串。 - Ryan C. Thompson
dput
命令? - Joshua Ulrich> x <- 1:10
> x
- Justinrepr
(对于支持的对象)一样。 - Ryan C. Thompson