Jon Dongen
Jon Dongen

Reputation: 1

function to calculate score

Calculate sequence score based on score matrix.

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 is score matrix. k is sequence type matrix.

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

solution: Please help answer two issues;

Issue 1:

add one more column to matrix k (lets call it "score"). Based on J matrix the score for this sequence should be 48.

4 1 5 3 2 48 

Issue 2:

k[2,] = 2 5 4 2 4 The sample function is producing wrong permutations. I don't want any repetition in the sequence. Here 4 is repeated. Secondly 1 is missing. is there any other best way to generate random permutations.

Upvotes: 0

Views: 109

Answers (1)

AkselA
AkselA

Reputation: 8836

You better double check the result. Without a reproducible example from your end it's difficult to confirm the values.

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

Upvotes: 1

Related Questions