it-swarm-ja.tech

R-R出力の要素をテキストファイルにキャプチャする

次のようにコマンドラインからRを呼び出して分析を実行しようとしています。

R --no-save < SampleProgram.R > SampleProgram.opt

たとえば、以下の単純なRプログラムを考えてみます。

mydata = read.csv("test.txt", header=T)
attach(mydata)
summary(Variable1)
q()

出力はSampleProgram.optに表示されます(一部のみ表示)。

> mydata = read.csv("test.txt", header=T)
> attach(mydata)
> summary(Variable1)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
   1.00    1.00    2.00    2.47    3.00    4.00
> q()

この単純なRプログラムは、Variable1に表示される要約統計を使用する必要があるスクリプトによって実行されます。

問題はこれです:Rでsummary(Variable1)の出力をキャプチャし、結果を出力ファイルに書き込む方法はありますか?つまり、変数1の要約統計を実行するためにRが必要です。「最小」、「中央値」、および「最大」の値を取得し、それらを出力テキストファイルに単独で書き込みます。この例では、出力ファイルには、値「1.00、2.00、4.00」(つまり、「最小」、「中央値」、「最大」の値)が1行だけ含まれている必要があります。

上記の例では、サマリー関数について説明しています。しかし、他のコマンド(glmなど)でもそれを行う必要があります

私はRにかなり慣れていないので、Rにこれを行う方法があるかどうか疑問に思っていましたか?

助けてくれてありがとう。

21
Karthik

summaryコマンドの個々の属性にアクセスすることもできます。例えば

> x=summary(seq(1:10))
> attributes(x)
> attributes(x)
$names
[1] "Min."    "1st Qu." "Median"  "Mean"    "3rd Qu." "Max."   

$class
[1] "table"

> x["1st Qu."]
1st Qu. 
3.25
4
csgillespie

簡単な方法は、印刷する出力をファイルに変換し、capture.outputを介してテキスト文字列に変換することです。次に、単に出力をファイルにcatできます。

dat<-data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100))
mod<-lm(a~b+c,data=dat)
out<-capture.output(summary(mod))
cat(out,file="out.txt",sep="\n",append=TRUE)
out<-capture.output(vcov(mod))
cat(out,file="out.txt",sep="\n",append=TRUE)

これにより、次を含むファイルout.txtが作成されます

Call:
lm(formula = a ~ b + c, data = dat)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.67116 -0.81736 -0.07006  0.76551  2.91055 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  0.01196    0.11724   0.102    0.919
b            0.11931    0.12601   0.947    0.346
c           -0.09085    0.13267  -0.685    0.495

Residual standard error: 1.171 on 97 degrees of freedom
Multiple R-squared: 0.0183, Adjusted R-squared: -0.001944 
F-statistic: 0.9039 on 2 and 97 DF,  p-value: 0.4084 

              (Intercept)             b             c
(Intercept)  0.0137444761 -0.0006929722 -0.0005721338
b           -0.0006929722  0.0158784141  0.0042188705
c           -0.0005721338  0.0042188705  0.0176018744
40
Ian Fellows

多くの方法があります:

  • sink()を使用します
  • file()を介してファイルを開き、結果をファイルに書き込みます
  • コードをファイルに入れ、出力を作成する_R CMD BATCH file.R_を介して実行します
  • write.table()またはwrite.csv()のようなバリアントを介して結果データを明示的に書き込む

これはかなり初歩的なものなので、おそらく「Introduction to R」マニュアル、またはRに関する数多くの本の1つを読むことでメリットを得られるでしょう。

最も簡単な解決策は

_R> X <- rnorm(100)
R> summary(X)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -2.480  -0.618  -0.223  -0.064   0.609   2.440 
R> write.table(matrix(summary(X)[c(1,3,6)], nrow=1), \
               file="/tmp/foo.txt", col.names=FALSE, row.names=FALSE)
R> system("cat /tmp/foo.txt")
-2.48 -0.223 2.44
R> 
_

ここで、summary()のサブセットを強制的に1行の行列にします。

10

ここで重要なことは、次のようにサマリー関数が機能することを学ぶことです。

summary(Variable1)

概要を印刷しません。要約を計算してから返します。コマンドラインプロセッサは、次の '>'プロンプトを表示する直前に印刷を行います。

多くのR関数はそのように動作します。したがって、割り当てによってほとんど常に戻り値を取得できます。だからあなたがするなら:

x = summary(Variable1)

その後、印刷されません。しかし、「x」と入力すれば、そうなります。コマンドラインは、最後に評価されたものを出力します。

「x」を取得したら、インポート/エクスポートメソッドを使用して、後で使用するために保存できます。

7
Spacedman
4
rcs

ファイルにエクスポートする必要はありません。最小値にはsummary(x)[1]、第1四半期の値にはsummary(x)[2]を使用してください。

1
user4009071