我被赋予了编写一个函数的任务,我将其命名为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
。
我不理解为什么以及为了知道某个功能是否正常工作所具有的直觉(花了一些时间才意识到它没有执行所需的任务)-所以我可以纠正错误在里面。
答案 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