Примушуйте R не використовувати експоненціальні позначення (наприклад, e + 10)?


228

Чи можу я змусити R використовувати звичайні числа замість e+10позначення -like? У мене є:

1.810032e+09
# and 
4

в межах одного вектора і хочуть побачити:

1810032000
# and
4

Я створюю вихід для старомодної програми, і мені потрібно написати текстовий файл за допомогою cat. Це добре працює поки що, але я просто не можу використовувати e+10там позначення.


Відповіді:


228

Це трохи сіра зона. Вам потрібно нагадати, що R завжди буде використовувати метод друку, і ці методи друку слухають деякі параметри. У тому числі "scipen" - штраф за науковий показ. Від help(options):

'scipen': ціле число. Штраф, який застосовується при вирішенні друку числових значень у фіксованих або експоненціальних позначеннях. Позитивні ухили до фіксованих та негативні до наукових позначень: фіксована нотація буде кращою, якщо вона не буде більше, ніж «ширше» цифр.

Приклад:

R> ran2 <- c(1.810032e+09, 4) 
R> options("scipen"=-100, "digits"=4)
R> ran2
[1] 1.81e+09 4.00e+00
R> options("scipen"=100, "digits"=4)
R> ran2
[1] 1810032000          4

Це сказало, що я все ще вважаю його вигідним. Найбільш прямий спосіб - використання sprintf()з явною шириною, наприклад sprintf("%.5f", ran2).


1
Дякую. scipen, здається, варіант, який я шукав. Моторошне пояснення штрафу змусило мене ухилятися. Але ваш приклад це добре пояснює. спринт, так? ти маєш на увазі неприємності, які я спринтував тиждень тому? :)
Метт Баннерт

4
У rstudio, якщо ви імпортуєте набір даних і зробите train_sample_10k = формат (train_sample_10k, Scientific = FALSE) та перезавантажте, це змінить наукові позначення.
mixdev

Як повернути речі в норму після цього?
AIM_BLB

6
@CSA: options("scipen"=0, "digits"=7)(це значення за замовчуванням)
Scarabee

Ви повинні перемістити той, який досягає результату, options("scipen"=100, "digits"=4)до верхньої частини коду, а той, що не знаходиться під ним ..., з відповідними примітками. Це може бентежити того, хто шукає швидке рішення (а Google показує перше як результат).
xbsd

152

Цього можна досягти, відключивши наукові позначення в Р.

options(scipen = 999)

4
Більше того, це можна помістити у файл .Rprofile, щоб він автоматично виконувався за замовчуванням.
smci

74

Моя улюблена відповідь:

format(1810032000, scientific = FALSE)
# [1] "1810032000"

Це дає те, що ви хочете, не замислюючись в налаштуваннях R.

Зауважте, що він повертає символьний рядок, а не об'єкт числа


1
Гм, це дивно, це не працює для мене. Я не отримую помилки, вона просто досі друкує наукові позначення.
Ovi

Не впевнений, що може бути не так. Я перевірив дуже стару (3.1.0) та нову (3.4.3) версію R, і вона працює для мене в обох. Швидше за все, якесь інше налаштування має перевагу, або ви знайшли помилку в Р. або кращому регістрі в Р. Чи можливо ви подаєте його рядок у наукові позначення, а не числовий об'єкт? Це пояснило б це.
Денні

10
Можливо, примітно, що це створює символ замість числа.
cengel

3
Якщо цифри у вашому векторі різної довжини, переконайтесь, що вони використовуються, justified = "none"інакше на них буде пробіли, що додають їх до однакової довжини.
Лорен Фітч

1
format(1e6, scientific=FALSE)повертається "1000000"при as.character(1e6)поверненні "1e+06", тому існує різниця між двома методами.
Міккі

7

Помістіть options(scipen = 999) у файл .Rprofile, щоб він автоматично виконувався за замовчуванням . (Не покладайтеся на те, щоб це робити вручну.)

(Це говорить про щось інше на інші відповіді: як?

  1. Це підтримує здорові речі, коли ви щодня чи щомісяця перебуваєте між різними проектами, різними мовами. Пам'ятайте, що вводити ваші налаштування кожного проекту не схильні до помилок та їх не можна масштабувати. Ви можете мати глобальний ~ / .Rprofile або проект .Rprofile. Або і те й інше, причому останнє перекриває перше.
  2. Зберігання всієї конфігурації в проектному або глобальному .Rprofile автоматично виконує її. Це корисно, наприклад, для завантаження пакетів за замовчуванням, конфігурації таблиць даних, оточення тощо. Знову ж таки, що конфігурація може працювати на сторінці налаштувань, і немає жодного шансу ви запам’ятати ці та їх синтаксис і ввести їх

Чому саме така відповідь? stackoverflow.com/a/27318351/680068 Крім Rprofile біт, може бути , краще змінити відповідь GingerJack в?
zx8754

@ zx8754: це не однакова відповідь: важливим моментом є переміщення цього матеріалу у ваш .Rprofile. Тоді ви ніколи не можете його забути. Крім того, з часом ваш .Rprofile накопичує всі ваші налаштування.
smci

1
Ви, звичайно, залежать від вас, але Q - це не "як я не забуду зробити X", а "як я можу зробити X".
zx8754

@ zx8754: Я щодня перебуваю між кількома проектами R та Python / пандами. В обох є налаштування, шляхи до пакунків і т. Д. Це дійсно зберігає речі, щоб мати один загальний конфігураційний файл, який зберігає їх. В рамках проектів.
smci

1
@ zx8754: коли ви працюєте над кількома проектами на декількох мовах, питання "як я можу зробити X" зливається з "як я не забуду зробити X", масштабованим, послідовним, автоматичним способом. Я просто додав більше пояснень. Для тих, хто є приводним приводом.
smci
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.