r - 循环内的下标越界
问题描述
我是 R 新手,遇到了问题。我正在尝试根据另一个数据帧(“razdeljena1”)中的数据填充矩阵(“m”) - 所有列和行名称或“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"
为此,我创建了一个 while 循环,它将读取每一行并提取必要的信息并将其写入矩阵。
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
}
该循环在前 9 次迭代中运行良好(并正确写入矩阵),然后返回一个Error in [<-(*tmp*, beseda1, beseda2, value = relat) : subscript out of bounds.
错误- 但是:当我尝试访问循环外的单元格(具有相同定义的坐标)时,它实际上返回了正确的单元格。
示例:错误发生时beseda1 = "PERO"
和beseda2 = "POSTEĽ"
; 但是,当我尝试在循环之外更改它时,它工作得很好:
beseda1 <- "PERO"
beseda2 <- "POSTEĽ"
m[beseda1, beseda2] <- 1
m[beseda2, beseda1] <- 1
我还尝试查看这是否是唯一会导致问题的对(通过启动一个大于 9 的数字循环)并在一些迭代后得到相同的错误。
解决方案
R 支持通过包含暗名称的两列字符矩阵进行赋值索引;不需要循环。只需这样做:
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.
推荐阅读
- javascript - 如何使用 Javascript 或 Jquery 打开空表单?
- django - 如何将存储在本地计算机中的媒体文件移动到 S3?
- laravel - 填写 pdftk php 后关闭 PDF 表单
- python - ItemClicked 以在 tableview 中显示数据
- automation - 为 n8n 工作流程自定义用户界面
- javascript - reactjs中如何访问嵌套对象
- javascript - 如何在 React.js 中将活动 div 和前一个 div 的背景颜色设置为红色?
- java - 为什么打印“”+变量单独输出每个变量而没有空格?
- rest - 当某些属性可以更改而某些属性不能基于资源的状态时,如何创建一个好的 PATCH 端点?
- java - 如何使用包裹传递地图列表?