Как сделать матрицу для упорядоченных пар в R? - PullRequest
0 голосов
/ 18 мая 2018

Я хочу сделать матрицу упорядоченных пар в R , т.е. каждая ячейка в матрице будет содержать точку (a, b).Я пробовал этот код:

calc_z<-function(results1){
#INPUT: Paired scores table
#OUTPUT: z score of a hypergeometric distribution as indicated in figure 1
a <- nrow(results1)
b <- ncol(results1)
results2 <- matrix(nrow = a ,ncol = b)
for (j in 1:b) {
 for (i in seq(1, a-3, 2)){
  results2[i, j] <- c(results1[i, j], results1[i+1, j])
  results2[i+1, j] <- c(results1[i+1, j], results1[i+2, j])
 }
results2[a-1, j] <- c(results1[a-1, j], results1[a, j])
results2[a, j] <- c(results1[a, j], results1[1, j])
}
`
`in my work: a=10, b=99`

Функция берет две соседние переменные и связывают их с точкой (a, b) (последние строки для последних чисел).Когда я пытаюсь запустить код, я получаю сообщение:

Error in results2[i, j] <- c(results1[i, j], results1[i + 1, j]) : number of 
items to replace is not a multiple of replacement length

В чем проблема и как ее решить?

дополнение: This is the data, I want to take every nearby games (1st and 2nd for example) and make them an ordered pair. I thought about summing but there is a difference between (0,1) and (1,0), so I need to leave it as an ordered pair.

Это данные, я хочу взять все близлежащие игры (например, 1-ю и 2-ю) и сделать из них упорядоченную пару.Я думал о суммировании, но есть разница между (0,1) и (1,0), поэтому мне нужно оставить это как упорядоченную пару.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Вы идете по столбцам, верно?Убедитесь, что вы установили пакет dplyr и попробуйте это:

output <- apply(results1, 2L, function(column) {
  lead1 <- dplyr::lead(column, 1L, default=NULL)
  pairs <- paste0("(", column[-length(column)], ",", lead1, ")")
  # return
  pairs
})
0 голосов
/ 18 мая 2018

Если вы хотите поместить два числа в каждую ячейку, вы можете выполнить одно из следующих действий, где мы проиллюстрируем это для элемента 1,1 матрицы:

# test input
x <- y <- 3

# character
mat1 <- matrix(nrow = 4, ncol = 7)
mat1[1, 1] <- paste(x, y)

# complex
mat2 <- matrix(nrow = 4, ncol = 7)
mat2[1, 1] <- x + 1i * y

# list
mat3 <- matrix(list(), nrow = 4, ncol = 7)
mat3[[1, 1]] <- c(x, y)

# numeric - encode assuming we know that largest element is < 1000
# and all elements are nonnegative
mat4 <- matrix(nrow = 4, ncol = 7)
mat4[1, 1] <- 1000 * x + y
...