Подтвердить что ты не робот

Как я могу вставить 100000 без сокращения на 1e + 05?

Вопрос. Как я могу использовать paste без 100000, становясь 1e+05?

Извините, если этот вопрос кажется фривольным (но это привело к ошибке в моем коде). Я использую R для вызова внешнего script, поэтому, когда я говорю, например. paste("abc",100000) Я хочу, чтобы он выводил "abc 100000", а не "abc 1e+05".

Вот пример того, как он выглядит на моем экране:

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

Это приводит к странному поведению, которое мой script работает для ввода "100001", но не "100000".

Я понимаю, что могу создать script для преобразования чисел в строки, но мне нравится, но я чувствую, что не должен делать этого, если есть внутренний способ сделать то же самое (я подозреваю, что есть какой-то "метод", Мне не хватает).

[Если это помогает, я на Ubuntu 12.04.1 LTS ( "точный" ), запуская R версию 2.14.1 (2011-12-22) в терминале.]

4b9b3361

Ответ 1

См. ?options, особенно 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> 

В качестве альтернативы можно легко форматировать форматирование старой школы через sprintf():

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

Ответ 2

В качестве альтернативы вы можете использовать целые числа, которые не печатаются в научной нотации. Вы можете указать, что ваш номер является целым числом, помещая за ним "L" или делая as.integer.

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

Ответ 3

В качестве альтернативы format может быть проще, чем sprintf, особенно если вы хотите изменить отображение десятичных знаков:

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