«нижний предел» может быть причиной этой проблемы имя столбца? - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь построить сегменты, которые соединяют точки в coordinates, это то, что пытается выполнить моя plot.mst() функция.Я не смог увидеть, работает ли эта функция должным образом, потому что, когда я запускаю этот код, я получаю сообщение об ошибке

"Ошибка в arcList [i, 1]: индекс за пределами границ"

И все же я не уверен, почему это происходит.

Я подумал, что это может иметь какое-то отношение к имени столбца, поэтому я изменил arcList[i,1] на arclist[i], что-то вроде этого, но теперь ошибка в следующей строке, как вы видите ниже.Я попробовал двойные скобки и сингл там, и ни один не помог.

Как мне справиться с этой ошибкой или избежать ее?

n = 50
x = round(runif(n)*1000)
y = round(runif(n)*1000) 
coordinates = cbind(x,y)
d = as.matrix(dist(coordinates))

AdjMatrix2List = function(d) {
  indices = which(!is.na(d), arr.ind = TRUE)
  ds = cbind(indices[,2], indices[,1], d[indices])
  colnames(ds) = c("head", "tail", "weight")
  return(ds)
}

ds = AdjMatrix2List(d)
ds.mst = msTreePrim(1:n,ds)

#Examine ds.mst$tree.arcs
str(ds.mst$tree.arcs)
 num [1:49, 1:3] 1 29 1 28 30 6 6 9 27 21 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:3] "ept1" "ept2" "weight"

plot.mst = function(arcList) {
  for (i in seq_along(arcList))
    start = arcList[i]
    end = arcList[i,2]
    segments(coordinates(start,1), coordinates(start,2), coordinates(end,1), coordinates(end,2))
}

plot(x,y,pch=16)
plot.mst(ds.mst$tree.arcs)

> *Error in arcList[[i, 2]] : subscript out of bounds*

1 Ответ

2 голосов
/ 25 сентября 2019
m <- matrix(1:4, ncol = 2)
#     [,1] [,2]
#[1,]    1    3
#[2,]    2    4

seq_along(m)
#[1] 1 2 3 4
#treats m as a vector

for (i in seq_along(m)) print(m[i])
#[1] 1
#[1] 2
#[1] 3
#[1] 4
#works but subsets m as a vector

for (i in seq_along(m)) print(m[i, 2])
#[1] 3
#[1] 4
#Error in m[i, 2] : subscript out of bounds
#matrix subsetting, there are only two rows, but i becomes larger than 2

for (i in seq_len(nrow(m))) print(m[i, 2])
#[1] 3
#[1] 4
#works and subsets m as a matrix
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...