Вы пытаетесь заполнить часть матрицы, поэтому блок, который вы пытаетесь вставить туда, должен иметь правильный размер:
data[41:150,]<-matrix(c(1,0),nrow=110,ncol=2,byrow=TRUE)
# nrow = 110, instead of 1 !!!!
В противном случае ваш кусочек будетдобавленный будет возвращен к вектору и добавлен по столбцам.Попробуйте, например, это:
data[41:150,] <- matrix(c(1,2,3,4,5), nrow=5, ncol=2, byrow=TRUE)
data[41:45,]
[,1] [,2]
[1,] 1 1
[2,] 3 3
[3,] 5 5
[4,] 2 2
[5,] 4 4
Можно ли пожаловаться?Да и сейчас.Нет, потому что R ведет себя как задокументировано (матрицы - это векторы с атрибутами измерений, и переработка работает с векторами).Да, потому что, хотя переработка может быть удобной, она может создавать ложные ожидания.
Почему индексы строк не являются 41,42,43, ...?Я не знаю, вот как ведут себя матрицы и векторы.
> (1:10)[5:6]
[1] 5 6
(обратите внимание, что на выходе [1]
, а не [5]
.)
Фреймы данных ведут себя по-разному, так что вы увидите исходные номера строк для срезов:
as.data.frame(data)[45:50,]