首页 > 解决方案 > 计算分数的函数

问题描述

根据得分矩阵计算序列得分。

sum(j[k])


j <- matrix(1:25, ncol = 5, nrow = 5)
diag(j) <- 0
j

n <- 1:5
k <- sample(n, 5, replace = FALSE)
k <- replicate(5, sample(n, 5, replace = FALSE))

j 是得分矩阵。k 是序列类型矩阵。

lets say k[1,] = 4 1 5 3 2 
         k[2,] = 2 5 4 2 4

解决方法:请帮忙回答两个问题;

问题一:

向矩阵 k 添加一列(我们称之为“分数”)。基于 J 矩阵,该序列的得分应为 48。

4 1 5 3 2 48 

问题 2:

k[2,] = 2 5 4 2 4 样本函数产生了错误的排列。我不希望序列中有任何重复。这里重复4。其次,缺少 1。有没有其他最好的方法来生成随机排列。

标签: rmatrix

解决方案


你最好仔细检查一下结果。如果没有您最终的可重现示例,则很难确认这些值。

set.seed(1)
k <- replicate(5, sample(5))

# each column is a random permutation of 1:5
k
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    2    5    2    3    5
# [2,]    5    4    1    5    1
# [3,]    4    2    3    4    2
# [4,]    3    3    4    1    4
# [5,]    1    1    5    2    3

j <- matrix(1:25, 5)
diag(j) <- 0

nr <- nrow(k)

# arrange successive values as a column pair
ix <- cbind(c(k[-nr,]), c(k[-1,]))

# use the column pair to reference indices in j
jx <- j[ix]

# arrange j-values into a matrix and sum by column, producing the scores
scores <- colSums(matrix(jx, nr-1))

cbind(t(k), scores)
#                scores
# [1,] 2 5 4 3 1     59
# [2,] 5 4 2 3 1     44
# [3,] 2 1 3 4 5     55
# [4,] 3 5 4 1 2     53
# [5,] 5 1 2 4 3     42

推荐阅读