2017-01-21 6 views
0

私は、倍精度値と非常に短い文字列からなるベクトルを持っています。私はsprintfに、nの数字までの結果を示しています。問題は、使用している間にsprintfの文字列を使用できない、たとえばsprintf("%.8g", x)なので、代わりに"%.8s"を使用しています。混合型と文字列のベクトルをn桁の精度までsprintfする方法はありますか?

そのため、Rが科学的表記法で数値を書いた場合、私は数値の先頭部分のみを印刷しており、結果は意味をなさない。

koza <- c(pi, " > ", 2.01645169344289e-05) 
sprintf("%.8s", koza) 

私は何を受け取ることである:以下、この動作の簡単な例私は何を受け取りたいのです

[1] "3.141592" " > "  "2.016451" 

どちらか何かのように:

[1] "3.1415927" " > "  "0.0000202" 

または

[1] "3.1415927" " > "  "2.0164517e-05" 

どうすればいいですか?

+1

最初に数値に変換しようとしています。それがnaでない場合は、sprintf関数を使用します。 'unlist(lapply(koza、function(x){ifelse(!is.numeric(x))、sprintf("%.8f "、as.numeric(x))、x)}))' – DJJ

+0

@DJJありがとう!私がしていることをフォーマットするのに最適です。これをカスタム関数として定義し、sprintf()の代わりに使用しました。 – Kusavil

答えて

1

あなたはこのベクトルに数値と文字列を混在しているので:

koza <- c(pi, " > ", 2.01645169344289e-05) 

Rは、文字列にそれらのすべてを変換した :

> koza 
[1] "3.14159265358979"  " > "     "2.01645169344289e-05" 

だから"%s"フォーマッタで印刷、それを文字列としてフォーマットしますしたがって、最初のN文字は"2.01645169344289e-05"になります。

> sprintf("%.4s", "abcdefghij") 
[1] "abcd" 
> sprintf("%.4s", koza) 
[1] "3.14" " > " "2.01" 

可能な限り数値で保存し、10進数でフォーマットし、文字列に貼り付ける必要があります。

+0

ありがとうございました!なぜ私は数字が失われているのか知っていました。あなたが言うように、何とかフォーマットする必要があるかもしれませんが、どうやってこれを行うのか分かりませんでした。私はunlist()、lapply()、そしてそれらの使い方について本当に知りませんでしたが、@DJJが提供する解決策は私にとっては完璧です:-)私はこれをカスタム関数として定義し、sprintf() 。 – Kusavil

関連する問題