1

このコードを実行すると:

library(TeachingDemos)

etxtStart(dir=getwd(), file="Nofunciona.txt")
etxtComment('Just a test')

for(i in 1:10){
  cat("###",i,":\n")  
  my.sample = sample(100)
  print(summary(my.sample))
  qqnorm(my.sample)
  etxtPlot(width=7.5)
} 

etxtStop()

テキスト行「Just a test」とグラフを含めるコマンドを含む「Nofunciona.txt」という名前のファイルのみを取得しますが、cat() または print(summary()) の結果については何も表示されませんが、結果がコンソールに表示されます。

これらの 2 つのループを使用してループを変更すると、次のようになります。

for(i in 1:10){
  cat("###",i,":\n")  
  my.sample = sample(100)
  print(summary(my.sample))
}

for(i in 1:10){
  qqnorm(my.sample)
  if(archivo) etxtPlot(width=7.5)
}

etxtStop()

次に、cat() と summary() のテキスト結果と、最後にグラフを含めるコマンドを含むファイルを取得できます。最後の for ループで同じグラフを 10 回取得することはわかっていますが、これは関係ありません。

for ループ内でグラフィック結果とテキスト結果を同時に取得できないようです。最初のコードが機能しないのはなぜですか?

何か案が?

ありがとう。

4

1 に答える 1

1

これが発生する理由は、etxtPlotコマンドがトランスクリプトまたはコマンド履歴に表示されないようにするためです。そのため、その関数が呼び出されると、主力の内部関数 (タスクによって呼び出される) を伝える変数が設定されます。 manager) コマンドと結果の出力を一時的にスキップします。出力の抑制は呼び出しの間だけ続き、他のetxtPlotすべては適切に出力されるため、これはループの外側で正しく機能します。これをループで実行すると問題が発生します。ループで実行されるすべてが 1 つのステップで処理されます (処理?addTaskCallback方法の詳細については、を参照してください)。そのため、コマンドと からの出力をetxtPlot抑制すると、コマンドとループ内の他のすべてからの出力。

考えられる回避策は、次のコマンドを実行することです。

trace(etxtPlot, edit=TRUE)

次に、コードの最後から 2 行目で to をTRUE変更します。FALSEこれで、すべてのコマンドと出力 ( への呼び出しを含むetxtPlot) が表示されますが、プロットはすべて出力の前に表示されます (プロットを含めるコマンドは反復ごとに挿入されますが、他の出力はループの完了後に挿入されるためです)。 )。

完全なテンプレート ファイルを作成するのではなく、一部のコードを処理するだけの場合は、knitr パッケージ、具体的にはstitchまたは関数を使用することを検討してください。spin彼らはリアルタイムのトランスクリプトを行いませんが、自動プロット挿入をより適切に処理します.

于 2013-07-22T15:25:08.090 に答える