В R, как мне создать функцию, в которой все числа в векторе масштабируются, Inf становится 1, а -Inf становится 0?

#r #function #statistics

#r #функция #Статистика

Вопрос:

Я новичок в R, и у меня есть задание, в котором я должен создать функцию, в которой все числа масштабируются, Inf сопоставляется с 1, а -Inf сопоставляется с 0. Я понимаю, как выполнить масштабирование, я просто не знаю, как добавить к функции, чтобы Inf стал 1, а -Inf стал 0. Если бы кто-нибудь мог хотя бы указать мне правильное направление или сообщить, какие команды в R позволят мне это сделать, я был бы очень признателен!

Вот мой код на данный момент:

 rescale01<-function(x){  
   rng<-range(x, na.rm=TRUE, finite=TRUE)
    (x-rng[1])/(rng[2]-rng[1])
  }
  

Заранее спасибо за вашу помощь.

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

1. Только что понял, что допустил опечатку в более ранней версии. Я хочу, чтобы -Inf отображался в 0, а Inf отображался в 1.

Ответ №1:

Вы можете попробовать atan

 f <- function(x) 0.5 atan(x)/pi
  

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

1. Почти: «Inf сопоставляется с 1, а -Inf сопоставляется с -1» , ваша функция меняет пределы и переходит от 0 к 1. 2*atan(x)/pi это правильная функция. Проголосуйте, но измените его.

2. @RuiBarradas Спасибо за напоминание! Я допустил там опечатку, но она не исправлена.