8

Python のrepr関数や Lisp のprin1-to-string. そのような関数はRに存在しますか? 単純なベクトルとリストだけで、複雑または奇妙なオブジェクトで動作する必要はありません。

編集: の出力ではなく、同一のオブジェクトを生成するためにコンソールに入力する必要がある文字列が必要ですprint(object)

4

4 に答える 4

17

あなたがリストした Python/Lisp 関数には詳しくありませんが、 または のいずれかが必要だと思いdputますdump

x <- data.frame(1:10)
dput(x)
dump("x", file="clipboard")
于 2012-04-02T21:12:04.973 に答える
6

?evaluate評価パッケージを参照してください。

print(object)編集:ポスターは後でコメントで、出力を保持する文字列ではなく、オブジェクトを再構築するコマンドが必要であることを明確にしました。その場合、それevaluateは望まれることではありませんが( Joshua Ullrichdputがコメントですでに述べたように、そして私が投稿したので回答に転送されました)、機能します。 少なくともWindowsでクラシックグラフィックスを保存して再プロットします。最後のラティスグラフィックスオブジェクトを取得します。また、インタラクティブコンソールで最後の値を保持していることにも注意してください。dumprecordPlotreplayPlottrellis.last.object.Last.value

于 2012-04-02T20:32:23.593 に答える
2

まったく同じ質問がありました。これには何かが組み込まれているのか、それとも自分で書く必要があるのか​​ 疑問に思っていました. 組み込みのものが見つからなかったので、次の関数を作成しました。

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
于 2015-03-03T01:42:30.263 に答える
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='')
}
于 2012-04-02T20:15:16.660 に答える