2012-11-27 7 views
20

Pytanie: Jak mogę użyć paste bez 100000 na numer 1e+05?Jak mogę wkleić 100000 bez skracania go do 1e + 05?

Przepraszam z góry, jeśli to pytanie wydaje się niepoważne (ale spowodowało błąd w moim kodzie). Używam R do wywoływania zewnętrznego skryptu, więc kiedy mówię np. paste("abc",100000) Chcę, aby wyprowadzić "abc 100000", a nie "abc 1e+05".

Oto przykład jak to wygląda na moim ekranie:

> paste("abc",100000) 
[1] "abc 1e+05" 
> paste("abc",100001) 
[1] "abc 100001" 

Wynika to w dziwaczne zachowanie, że mój skrypt działa dla wejścia „100001”, ale nie „100000”.

Zdaję sobie sprawę, że mógłbym stworzyć skrypt do konwersji liczb na ciągi znaków, ale lubię, ale uważam, że nie powinienem tego robić, jeśli istnieje wewnętrzny sposób robienia tego samego (podejrzewam, że istnieje pewna "metoda" I "brakuje").

[Jeżeli to nie pomaga, jestem na Ubuntu 12.04.1 LTS ("precyzyjny"), bieg R w wersji 2.14.1 (2011-12-22) w terminalu.]

Odpowiedz

22

Zobacz ?options, szczególnie scipen:

R> paste("abc", 100000) 
[1] "abc 1e+05" 
R> options("scipen"=10) # set high penalty for scientific display 
R> paste("abc", 100000) 
[1] "abc 100000" 
R> 

Alternatywnie, formatowanie kontrola szczelnie droga starej szkoły poprzez sprintf():

R> sprintf("%s %6d", "abc", 100000) 
[1] "abc 100000" 
R> 
+0

Albo po prostu umieścić „100000” w cudzysłowie zbyt ... – neilfws

11

Alternatywnie, można użyć liczb całkowitych, które don” t drukowane w notacji naukowej. Możesz określić, że twoja liczba jest liczbą całkowitą, umieszczając za nią "L" lub robiąc as.integer.

> paste("abc",100000L) 
[1] "abc 100000" 
> paste("abc",as.integer(1000000000)) 
[1] "abc 1000000000" 
6

format Alternatywnie może być prostsze niż sprintf zwłaszcza gdy chcesz zmienić sposób wyświetlania dziesiętne:

> paste("abc",format(100000, scientific = FALSE)) 
[1] "abc 100000" 
> paste("abc",format(0.1234567, scientific = FALSE, digits = 4)) 
[1] "abc 0.1235" 
Powiązane problemy