3

C++ のプログラムの機能テストを R で書いています。典型的な出力ファイルには、いくつかの列が「string」であり、他の列が「double」です。diff次に、 R によって返される期待される出力ファイルと C++ によって返される観測された出力ファイルを比較するために使用したいと思います。

疑似 C++ では、単純に次のようにします。

stringstream ssTxt;
ssTxt.precision (7);
ssTxt.setf (ios::scientific);
for(i=0; i<10; ++i){
  ssTxt << names[i] << " " << values[0][i] << " " << values[1][i] << " " << values[2][i] << endl;
  // write in file and clear ssTxt
}

典型的な出力は次のとおりです。

item1 2.8200000e-01 500 4.1846912e-04

R では、次のようにします。

results <- data.frame(name="item1", val1=0.282, val2=500, val3=0.00041846912873)
write.table(x=format(results, digits=8, nsmall=7, scientific=TRUE), file=...)

同じデータに対応する出力は次のとおりです。

item1 2.82e-01 500 4.1846912e-04

ご覧のとおり、ほとんど機能しますが、R は "2.82" の後に末尾の 0 を追加しません。私は、C++ コードよりも R コードを変更することを好みます。では、どうすればそれを行うことができますか?

4

1 に答える 1

6

試したことはあります
sprintfformatC

具体的には

sprintf("%e", 2.82e-01) 

トリックを行う必要がありますが、上記のように、この関数のさまざまなフォーマット機能を説明するhelp(sprintf)を見てください...

于 2012-12-15T21:51:37.917 に答える