Функция R возвращает «Символ (0)» вместо «Направление» - PullRequest
1 голос
/ 04 ноября 2019

Я пытаюсь преобразовать направление ветра (значения 0-360) в основное направление (т. Е. Северо-западное направление). Мой код ниже:

DegToDer <- function(degree) {
  value <- as.integer((degree / 45)+ .5)
  direction <- c("N","NE","E","SE","S","SW","W","NW")
  return(direction[((value+1) %% 8)])}

Когда я запускаю его в своем столбце, я получаю следующую ошибку:

замена имеет 346 строк, данные имеют 365

Я проверил это с несколькими значениями и обнаружил, что каждая вещь, которая должна возвращать значение «NE», возвращает только «символ (0)»

> DegToDer(293)
character(0)
> DegToDer(292)
[1] "W"
> DegToDer(360)
[1] "N"

Любая помощь вэтот вопрос высоко ценится!

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Итак, проблема здесь в том, что R индексирует векторы, начиная с 1, поэтому, если вы укажете значение типа floor((293/45)+0.5)+1, которое возвращает 8, ваш индекс будет равен 0, а возвращаемое значение функции будет NA

Как насчет того, чтобы попытаться работать с базовой функцией R cut?

DegToDer <- function (degree) {
  return(cut(
    x = degree,
    breaks = c(0, seq(22.5, 337.5, 45), 360),
    labels = c("N","NE","E","SE","S","SW","W","NW","N"),
    include.lowest = TRUE
  ))
}
0 голосов
/ 04 ноября 2019

Вы %% формула слегка ошибочна.

degree <- 0:90

DegToDer <- function(degree) {
    value <- as.integer(degree / 45 + 0.5)
    direction <- c("N","NE","E","SE","S","SW","W","NW")
    return(direction[(value %% 8) + 1])
}

table(DegToDer(degree))
#> 
#>  E  N NE 
#> 23 23 45

Создано в 2019-11-04 пакетом Представить (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...