试图了解某些功能的工作原理

时间:2019-02-02 10:41:23

标签: r function loops sorting

我被赋予了编写一个函数的任务,我将其命名为my_mode_k

输入由两个变量组成:

(x, k)
作为x

是长度为n的自然数向量。给定xk的最大对象可以是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 :(得分:1)

以下是实现此目标的几个步骤。

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