Математическое округление в R

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

Математическое округление в R

Сообщение VistaSV30 » 12 авг 2021, 16:58

Добрый день!
Нужно сделать функцию для математического округления или может быть есть уже готовые в каком-то пакете?
Базовая функция round() выполняет банковское округление т.е.

Код: Выделить всё

a <- c(2.65, 2.75) 
round(a, 1)
Вернет 2.6, 2.8, а мне нужно 2.7, 2.8

Пробую сам написать функцию, пока не получается
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

Re: Математическое округление в R

Сообщение VistaSV30 » 12 авг 2021, 17:13

Вот такой вариант вроде бы работает:

Код: Выделить всё

a <- c(2.45, 2.55, 2.65, 2.75, -2.75, 2.3333, 2.98)

mround <- function(num, cnt=0) {
  z = sign(num)
  num = abs(num) * 10 ** cnt * 10
  
  b <- c()
  for(i in num) {
    if(i %% 10 >=5) (b = c(b, i+10)) else (b = c(b, i))
  }
  
  num = trunc(b/10) / 10 ** cnt * z
  return(num)
}

mround(a,1)
Может быть можно что-то еще подкрутить в коде? Я только учусь
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

gamm
Гуру
Сообщения: 4048
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Математическое округление в R

Сообщение gamm » 12 авг 2021, 17:23


Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

Re: Математическое округление в R

Сообщение VistaSV30 » 12 авг 2021, 17:34

gamm, спасибо большое!
Можно считать, что вопрос решен! :D
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

gamm
Гуру
Сообщения: 4048
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Математическое округление в R

Сообщение gamm » 12 авг 2021, 20:46

округление, кстати, сделано строго по стандарту, о чем написано в хелпе для round() ...

Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

Re: Математическое округление в R

Сообщение VistaSV30 » 13 авг 2021, 16:40

По ГОСТ Р 8.736-2011 Государственная система обеспечения единства измерений. ИЗМЕРЕНИЯ ПРЯМЫЕ МНОГОКРАТНЫЕ. Методы обработки результатов измерений. Основные положения

Е.5 Сохраняемую, значащую цифру в погрешности оценки измеряемой величины при округлении увеличивают на единицу, если отбрасываемая цифра неуказываемого младшего разряда больше либо равна пяти, и не изменяют, если она меньше пяти.

По этому ГОСТ должно использоваться математическое округление :!:
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

gamm
Гуру
Сообщения: 4048
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Математическое округление в R

Сообщение gamm » 13 авг 2021, 17:29

VistaSV30 писал(а):
13 авг 2021, 16:40
По ГОСТ Р 8.736-2011
какое отношение имеет российский гос к западной программе?
Note that for rounding off a 5, the IEC 60559 standard is expected to be used, ‘go to the even digit’.

Ivor
Завсегдатай
Сообщения: 345
Зарегистрирован: 11 дек 2006, 09:46
Репутация: 102
Откуда: Иркутск

Re: Математическое округление в R

Сообщение Ivor » 14 авг 2021, 03:29

gamm писал(а):
13 авг 2021, 17:29
какое отношение имеет российский гос к западной программе?
А какое отношение имеет зарубежный стандарт к конкретной задаче конкретного человека? И вообще, стандарт <> западный стандарт, как бы ни хотелось.

Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

Re: Математическое округление в R

Сообщение VistaSV30 » 14 авг 2021, 06:43

Python 3 тоже сейчас используется банковское округление, хотя до 2020 года в Python 2 было математическое округление. И главное в базовом Python не оставили ни каких функций с математическим округлением.

У меня заказчики работают в Excel в основном в версиях выпущенных до 2020 года, для них принципиально использовать математическое округление. И надо, чтобы мои результаты вычислений и заказчика были одинаковыми.
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot] и 7 гостей