Пытаясь понять, как работает какая-то функция - PullRequest
0 голосов
/ 02 февраля 2019

Мне дали задание написать функцию, которую я назвал: my_mode_k.

Вход состоит из двух переменных:

(x, k)

как x, естьвектор натуральных чисел длиной n.величайший объект x может быть k, учитывая, что k < n.

Выход my_mode_k - это объект с самой высокой частотой x.если в векторе более одного объекта, который является общим в x одинаковое количество раз, - функция выведет минимальный объект между ними.

например:

my_mode_k(x = c(1, 1, 2, 3, 3) , k =3)
1

Это код, который я написал:

  my_mode_k <- function(x, k){
  n <- length(x)
  x_lemma <- rep(0, k)
  for(i in 1:n){
    x_lemma[i] < x_lemma[i] +1
  }
      x_lem2 <- 1
      for( j in 2:k){
        if(x_lemma[x_lem2] < x_lemma[j]){
          x_lem2 <- j
        }
      }
      x_lem2
}

, который не работает должным образом.например:

my_mode_k(x = c(2,3,4,3,2,2,5,5,5,5,5,5,5,5), k=5) 
[1] 1

, так как функция должна возвращать 5.

Я не понимаю, почему и какова интуиция, чтобы даже знать, если функцияработает должным образом (мне потребовалось некоторое время, чтобы понять, что не выполняет нужную задачу), поэтому я мог исправить ошибку в ней.

1 Ответ

0 голосов
/ 02 февраля 2019

Вот несколько шагов для достижения этой цели.

k <- 5

input <- c(2,3,4,3,3,3,3,3,3,3,2,2,5,5,5,5,5,5,5,5)
# Calculate frequencies of elements.
tbl <- table(input[input <= k])
# Find which is max. Notice that it returns the minimum of there is a tie.
tbl.max <- which.max(tbl)
# Find which value is your result.
names(tbl.max)

input <- c(2,2,3,3,3,5,5,5)
names(which.max(table(input[input <= k])))
# 3

input <- c(2,2,5,5,5,3,3,3)
names(which.max(table(input[input <= k])))
# 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...