Заставить R не использовать экспоненциальную запись (например, e + 10)?

179

Могу ли я заставить R использовать обычные цифры вместо использования e+10 -like нотации? Я имею:

1.810032e+09
# and 
4

в пределах одного и того же вектора и хотите увидеть:

1810032000
# and
4

Я создаю вывод для старомодной программы, и мне приходится писать текстовый файл с помощью cat. Пока все работает нормально, но я просто не могу использовать нотацию e+10.

Теги:
number-formatting
scientific-notation
options

5 ответов

181
Лучший ответ

Это немного серая область. Вам нужно вспомнить, что R всегда вызывается методом печати, и эти методы печати прослушивают некоторые параметры. Включая "scipen" - штраф за научный показ. От help(options):

'scipen: integer. Штраф, который должен применяться при принятии решения о печати           числовые значения в фиксированной или экспоненциальной нотации. положительный           смещения ценностей к фиксированным и отрицательным к научным           Обозначение: фиксированная нотация будет предпочтительнее, если она больше           чем "более широкие цифры".

Пример:

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() с явной шириной.

  • 1
    Благодарю. scipen, кажется, вариант, который я искал. Жуткое объяснение штрафа заставило меня уклониться. Но твой пример это хорошо объясняет. Спринтф, а? ты имеешь в виду проблемы с sprintf неделю назад? :)
  • 4
    В rstudio, если вы импортируете набор данных и выполняете train_sample_10k = format (train_sample_10k, Scientific = FALSE) и перезагружаете, это изменит научные нотации.
Показать ещё 4 комментария
110

Это может быть достигнуто путем отключения научной нотации в R.

options(scipen = 999)
  • 3
    Более того, это можно поместить в ваш файл .Rprofile, чтобы он автоматически выполнялся по умолчанию.
37

Мой любимый ответ:

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

Это дает то, что вы хотите, без необходимости гадать в настройках R.

Обратите внимание, что он возвращает строку символов, а не числовой объект

  • 0
    Хм, это странно, это не работает для меня. Я не получаю ошибку, он просто печатает научную нотацию.
  • 0
    Не уверен, что может быть не так. Я зарегистрировал очень старую (3.1.0) и новую (3.4.3) версию R, и она работает для меня в обеих. Скорее всего, какой-то другой параметр где-то имеет приоритет, или вы обнаружили ошибку в версии или в крайнем случае в R. Возможно ли, что вы вводите строку в научной нотации, а не в числовом объекте? Это объяснило бы это.
Показать ещё 4 комментария
0

Вставьте options(scipen = 999) в файл .Rprofile, чтобы он автоматически выполнялся по умолчанию. (Не полагайтесь на это вручную).

(Это говорит что-то другое, чем другие ответы: как?

  1. Это сохраняет здравый смысл, когда вы думаете о нескольких проектах, на нескольких языках ежедневно или ежемесячно. Помнить, что вы вводите параметры вашего проекта, подвержены ошибкам и не масштабируемы. У вас может быть глобальный файл ~/.Rprofile или per-project.Rprofile. Или и то, и другое с последним, перекрывающим первое.
  2. Сохраняя всю вашу конфигурацию в общесистемном или глобальном.Rprofile, автоматически выполняет ее. Это полезно, например, для загрузки пакетов по умолчанию, конфигурации data.table, среды и т.д. Опять же, этот конфиг может запускаться на странице настроек, и у вас нет шансов, что вы запомните их и их синтаксис и введите их в
  • 0
    Почему точно такой же ответ? stackoverflow.com/a/27318351/680068 Помимо бита Rprofile, может быть, лучше отредактировать ответ GingerJack?
  • 0
    @ zx8754: это не совсем тот же ответ: решающий момент - переместить этот материал в свой .Rprofile. Тогда ты никогда не забудешь это. Кроме того, со временем ваш .Rprofile накапливает все ваши настройки.
Показать ещё 4 комментария
0

options(scipen=x) где x - число десятичных знаков, которые вы хотите отобразить

Ещё вопросы

Сообщество Overcoder
Наверх
Меню