【问题标题】:Does R have an equivalent of Python's "repr" (or Lisp's "prin1-to-string")?R 是否有相当于 Python 的“repr”(或 Lisp 的“prin1-to-string”)?
【发布时间】:2012-04-16 11:54:34
【问题描述】:

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

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

【问题讨论】:

  • 也许您正在寻找dput
  • R 中的大多数对象都有一个默认的打印方法,如果你只是在命令行上调用它们,它就会满足你的要求。 > x <- 1:10> x
  • @Justin,我的意思是我想要在 R 控制台中输入的表示来构造对象,就像repr 在 Python 中所做的那样(对于支持的对象)。

标签: string r representation


【解决方案1】:

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

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

【讨论】:

  • 是的,dump/dput 看起来像他们做我想做的事。谢谢。
  • 这将适用于简单的 R 对象(向量、矩阵、数据框、这些事物的列表、S4 类),但对于环境和其中包含环境的任何事物(闭包、带有环境元素的列表)都无效) 也可能是其他更复杂的类。
【解决方案2】:

查看评估包中的?evaluate

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

【讨论】:

    【解决方案3】:

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

    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
    

    【讨论】:

      【解决方案4】:

      你可以使用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 而不是隐式打印结果。那应该去掉行号。
      • 我不想要print(object) 的输出,我想要我要输入的字符串来创建对象。
      猜你喜欢
      • 2020-02-16
      • 2014-03-06
      • 2020-01-16
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      相关资源
      最近更新 更多