2016-10-13 9 views
0

.txtのように.Rファイルを書き出すか、からR scriptを作成します。しかし、通常、.txtファイルを書き出すときには、outputが含まれていて、それにはcommandsではありません。ですから、R scriptconsolesaveからRコマンドを使って書きたいと思います。Rを使用せずにRコンソールから.Rファイルを作成するか、Rコマンドを使用するエディタ

Rにwrite.Rがあるかどうかわかりません。私はsink()コマンドを使ってみましたが、もう一度outputs the output and not commandsです。

sink("Rscriptfrom_Console.R") 
sapply(iris,class) 
sink() 

R script file (.R) from R console using R commandsを作成しています。

ご協力いただきまして誠にありがとうございます。 ありがとう!

+0

あなたは、ファイルを作成し、実行してRコンソールからそれを編集できます。 'file.createを( 'foo.R')file.edit( 'foo.R') '。 –

+0

'writeLines()'と 'file()'を使ってみたところ、動作しているようです。より多くのコマンドを追加してそれを調達することでチェックしましょう。 –

+0

ここには小さなものがあります。 ( "sapply"、 "iris"、 "class"))、fileConn); close(fileConn); source( 'foo.R(fileConn) ') ' –

答えて

1

私自身の質問に答える。より良い答えがあれば投稿してください。 ここでfile()writeLines()関数を使用し、source()を使用して、書き込まれた.Rファイルが機能しているかどうかを確認してください。

fc <- file("out.R") 

    writeLines(c("print(head(iris))", 
    "print(summary(iris))"), 
    fc) 

    close(fc) 

    source("out.R") 
    # Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
    # 1   5.1   3.5   1.4   0.2 setosa 
    # 2   4.9   3.0   1.4   0.2 setosa 
    # 3   4.7   3.2   1.3   0.2 setosa 
    # 4   4.6   3.1   1.5   0.2 setosa 
    # 5   5.0   3.6   1.4   0.2 setosa 
    # 6   5.4   3.9   1.7   0.4 setosa 

    # Sepal.Length Sepal.Width  Petal.Length Petal.Width 
    # Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 
    # 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 
    # Median :5.800 Median :3.000 Median :4.350 Median :1.300 
    # Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199 
    # 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800 
    # Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500 

    #  Species 
    # setosa :50 
    # versicolor:50 
    # virginica :50 
+0

私は 'file' ...' close'を使うことをお勧めします。ファイル名を直接使用しています(私の答えを見てください)。 'close'などの関数を使用すると、一般的にエラーが発生しやすくなります。つまり、' close'コールの前にエラーがスローされた場合、実行は停止し、 'close'メソッドは呼び出されません。これを軽減するには、そのような環境で常に['on.exit'](https://stat.ethz.ch/R-manual/R-devel/library/base/html/on.exit.html)を使うべきですシナリオだからあなたの場合は、 'close(fc)'を削除し、代わりに 'file'の呼び出しの直後に' on.exit(close(fc)) 'を置きます。 –

+0

この情報をお寄せいただきありがとうございます。 'on.exit'をチェックし、あなたの例を実装する時間を与えてください。ありがとう! –

0

あなたがsinkが何をするか誤解しそうです:それは出力をキャプチャし、ファイルに書き込みます。評価されていないR表現をキャプチャしません。これはあなたがしたいことです。

評価されていないR式をキャプチャするには、quoteにラップするか、同様のメカニズムを使用する必要があります。あなたの例を使用するには

quoted_expr = quote(sapply(iris, class)) 

quoted_exprにはR式が含まれています。次に、あなたはRコードの文字列表現に変換する必要があります。

code_representation = deparse(quoted_expr, backtick = TRUE) 

backtick = TRUEは、ここでは厳密には必要ではないが、それはそれは必要だ特定のケースがあるので、常にそれを使用することをお勧めします。

最後に、我々は、ファイルに次のコード表現を書き込むことができます。

writeLines(code_representation, 'code.r') 

は今、上記の例では、ファイルへの固定R式を書きました。私たちは文字列を使っているかもしれません。しかし、文字列の代わりに引用符で囲まれた式を使用すると、文字列(エラーが発生しやすく効率が悪い)を悩まされることなく、即座にコードを変更することができます。例えば、我々は、ユーザーが作業するdata.tableか決めましょうことができます:

dataset_name = 'mtcars' # Modify to your heart’s content 
quoted_expr = substitute(sapply(dataset, class), 
         list(dataset = as.name(dataset_name))) 

# `quoted_expr` is now: 
sapply(mtcars, class) 

...など

関連する問題