нижний индекс за пределами цикла - PullRequest
0 голосов
/ 01 февраля 2020

Я новичок в R и столкнулся с проблемой. Я пытаюсь заполнить матрицу («m») на основе данных в другом кадре данных («razdeljena1») - все имена столбцов и строк или «m» соответствуют именам, найденным в первом и втором столбцах в «razdeljena1» ".

m <- matrix(1:729, byrow = TRUE, nrow = 27,
            dimnames = list(c("PES", "MAčKA", "VTÁK","HORA","STROM","RIEKA","SLNKO","MÄSO","SYR","VODA","CHLIEB","KLADIVO","METLA","PERO","NÔŽ","POSTEĽ","STÔL","SKRIŇA","LAMPA","TOPÁNKA","NOHAVICE","KLOBÚK","DÁŽDNIK","VEDRO","FĽAŠA","VRECE","KONZERVA"),
                            c("PES", "MAčKA", "VTÁK","HORA","STROM","RIEKA","SLNKO","MÄSO","SYR","VODA","CHLIEB","KLADIVO","METLA","PERO","NÔŽ","POSTEĽ","STÔL","SKRIŇA","LAMPA","TOPÁNKA","NOHAVICE","KLOBÚK","DÁŽDNIK","VEDRO","FĽAŠA","VRECE","KONZERVA")))
m <- replace(m, 1:729, NA)

Вот первые 12 наблюдений в razdeljena1

       1          2          rating.response
  [1,] "SYR"      "KLADIVO"  "1"            
  [2,] "LAMPA"    "DÁŽDNIK"  "1"            
  [3,] "CHLIEB"   "KLOBÚK"   "1"            
  [4,] "STROM"    "KONZERVA" "1"            
  [5,] "PERO"     "NÔŽ"      "1"            
  [6,] "STÔL"     "DÁŽDNIK"  "1"            
  [7,] "STROM"    "VODA"     "1"            
  [8,] "DÁŽDNIK"  "KONZERVA" "1"            
  [9,] "PERO"     "POSTEĽ"   "1"            
 [10,] "HORA"     "VODA"     "1"            
 [11,] "LAMPA"    "FĽAŠA"    "1"            
 [12,] "STROM"    "SKRIŇA"   "1"     

. Для этого я создал время l oop, которое будет читать каждую строку и извлекать необходимую информацию и запишите его в матрицу.

a <- 1
while (a <379){
  beseda1 <- razdeljena1[a,1]
  beseda2 <- razdeljena1[a,2]
  relat <- razdeljena1[a,3]

  m[beseda1, beseda2] <- relat
  m[beseda2, beseda1] <- relat

  a <- a+1
}

l oop хорошо работает для первых 9 итераций (и правильно записывает в матрицу), а затем возвращает ошибку Error in [<-(*tmp*, beseda1, beseda2, value = relat) : subscript out of bounds. Я посмотрел на ошибку и ответ на него говорит, что я пытаюсь получить доступ к столбцу или строке, которая не существует - однако: когда я пытаюсь получить доступ к ячейке за пределами l oop (с идентично определенными координатами), он фактически возвращает правильная ячейка.

пример: ошибка возникает, когда beseda1 = "PERO" и beseda2 = "POSTEĽ"; однако, когда я пытаюсь изменить его за пределами l oop, он работает просто отлично:

beseda1 <- "PERO"
beseda2 <- "POSTEĽ"

m[beseda1, beseda2] <- 1
m[beseda2, beseda1] <- 1

Я также попытался выяснить, не является ли это единственной парой, которая может вызвать проблемы (запустив некоторое время l oop с числом больше 9) и получил ту же ошибку после нескольких итераций.

1 Ответ

0 голосов
/ 01 февраля 2020

R поддерживает индексирование присваивания двумя символьными матрицами столбцов, содержащими dim-имена; Нет l oop не требуется. Просто сделайте это:

 m[ razdeljena1[ , 1:2] ] <- razdeljena1[ , 3]

Демонстрация того, что это удачно для предоставленных вами небольших примеров данных:

> m [ razdeljena1[ , 1:2] ] <- razdeljena1[,3]
> m
         PES MAčKA VTÁK HORA STROM RIEKA SLNKO MÄSO SYR VODA CHLIEB KLADIVO METLA PERO NÔŽ
PES      NA  NA    NA   NA   NA    NA    NA    NA   NA  NA   NA     NA      NA    NA   NA 
MAčKA    NA  NA    NA   NA   NA    NA    NA    NA   NA  NA   NA     NA      NA    NA   NA 
VTÁK     NA  NA    NA   NA   NA    NA    NA    NA   NA  NA   NA     NA      NA    NA   NA 
HORA     NA  NA    NA   NA   NA    NA    NA    NA   NA  "1"  NA     NA      NA    NA   NA 
STROM    NA  NA    NA   NA   NA    NA    NA    NA   NA  "1"  NA     NA      NA    NA   NA 
#snipped remaining rows.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...