2015-04-30 4 views
3

Когда я преобразовываю вектор в матрицу с слишком малым количеством элементов, чтобы заполнить матрицу, тогда элементы вектора будут переработаны. Есть ли способ превратить рециркуляцию или иным образом заменить рециркулированные элементы NA?r Преобразование вектора в матрицу без переустановки

Это поведение по умолчанию:

> matrix(c(1,2,3,4,5,6,7,8,9,10,11),ncol=2,byrow=TRUE) 
    [,1] [,2] 
[1,] 1 2 
[2,] 3 4 
[3,] 5 6 
[4,] 7 8 
[5,] 9 10 
[6,] 11 1 
Warning message: 
In matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11), ncol = 2, byrow = TRUE) : 
    data length [11] is not a sub-multiple or multiple of the number of rows [6] 

Я хотел бы результирующую матрицу быть

 [,1] [,2] 
[1,] 1 2 
[2,] 3 4 
[3,] 5 6 
[4,] 7 8 
[5,] 9 10 
[6,] 11 NA 

ответ

5

Вы не можете включить рециркуляции выключен, но вы можете сделать некоторые манипуляции с вектором до того вы формируете матрицу. Мы можем расширить длину вектора, исходя из того, каковы будут размеры матрицы. Функция замены length<- будет прокладывать вектор с NA до нужной длины.

x <- 1:11 
length(x) <- prod(dim(matrix(x, ncol = 2))) 
## you will get a warning here unless suppressWarnings() is used 
matrix(x, ncol = 2, byrow = TRUE) 
#  [,1] [,2] 
# [1,] 1 2 
# [2,] 3 4 
# [3,] 5 6 
# [4,] 7 8 
# [5,] 9 10 
# [6,] 11 NA 
+0

Очень простое решение, спасибо! –

Смежные вопросы