20

これを想像しているかもしれませんが、Rベクトル(および場合によっては行列やデータフレームなどの他のオブジェクト)をそのオブジェクトの入力に使用する形式で印刷できる組み込みのR関数があると思います(文字列)。例えば、

> x <- c(1,2,3)
> x
[1] 1 2 3
> magical.function(x)
"c(1,2,3)" 

この機能はありますか?

4

2 に答える 2

34

dput多分?

> test <- c(1,2,3)
> dput(test)
c(1, 2, 3)

dump作業ディレクトリに書き込まれているファイルに一度に複数のオブジェクトを出力することもできます。

> test2 <- matrix(1:10,nrow=2)
> test2
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10
> dump(c("test","test2"))

dumpdata.r次に、以下が含まれます。

test <-
c(1, 2, 3)
test2 <-
structure(1:10, .Dim = c(2L, 5L))
于 2012-06-02T05:30:47.543 に答える
2

dput()私がやろうとしていたことに対してそれが機能していないことがわかったので、私もこのソリューションを追加することにしました。ユーザーセッションに基づいてレポートを作成するために使用するshinyアプリがあり、.Rmdをレンダリングする前に、光沢のあるセッションから.Rmdにユーザーパラメーターを移植するために使用します。knitrknit_expand()

あまり詳しく説明しなくても、ベクトルは「そのまま」移植する必要があります。これは、誰かが実行する.Rmdのコード行にベクトルが書き込まれるためです。この場合、dput()出力はコンソールにのみ出力され、dump()メソッドは機能するため、機能しませんでしたが、毎回新しいファイルを書き込んで削除したくありませんでした。

もっと良い方法があるかもしれませんが、私はベクトルの文字オブジェクトを「そのまま」返す関数を作成しました。数値ベクトルと文字ベクトルの両方を処理します(文字ベクトルの各メンバーを引用符で囲みます)。また、単一の入力を処理し、そのまま返します。それはきれいではなく、それを書くためのより効率的な方法があると確信していますが、それは私のニーズに完全に機能します。私はこの解決策を争いに加えると思った。

printVecAsis <- function(x) {
  ifelse(length(x) == 1, x, 
       ifelse(is.character(x), paste0("c(", paste(sapply(x, function(a) paste0("\'",a,"\'")), collapse=", "), ")"),
              paste0("c(", paste(x, collapse=", "), ")")))}
于 2016-01-03T01:57:32.190 に答える