R круглое экспоненциальное число

#r #rounding #stat

#r #округление #статистика

Вопрос:

Я просто пытаюсь округлить число R, например:

 > round(1.327076e-09)
  

Я хотел бы, чтобы это привело к

 > 1.33e-09
  

но приводит к

 > 0
  

какую функцию можно использовать?

Комментарии:

1. Почему оно должно возвращать, 1.32e-09 не должно быть 1.33e-09 ? Или вы хотите просто усечь число после второго dp?

Ответ №1:

Попробуйте signif :

введите описание изображения здесь

 > signif(1.326135235e-09, digits = 3)
[1] 1.33e-09
  

Ответ №2:

Использовать signif :

 x <- 1.327076e-09 
signif(x,3)
[1] 1.33e-09
  

или sprintf :

 sprintf("%.2e",x)
[1] "1.33e-09"
  

Комментарии:

1. Хороший звонок с sprintf . В общем, вы хотите потерять точность только при отображении чисел, а не при фактических вычислениях. round и signif следует использовать экономно.

Ответ №3:

Функция round произведет округление, и вы можете указать количество десятичных знаков:

 x <- 1.327076e-09
round(x, 11)
[1] 1.33e-09
  

Принимая вызов, поставленный @Joris и @GavinSimpson — чтобы использовать trunc для решения этой задачи, выполните следующее:

 library(plyr)
round_any(x, 1e-11, floor)
[1] 1.32e-09
  

Комментарии:

1. Вы можете добавить trunc(), чтобы делать то, что делает OP (не то, что он просит).

2. Динь-дон! Это функция, которая пришла на ум, когда я увидел желаемый результат, но я подумал, что округление в вопросах OP заменяет указанный результат.

3. @Joris но как заставить trunc() работать здесь: > trunc(1.327076e-09) [1] 0 ?