Удаление строк матрицы, работает индивидуально, l oop ошибка [R] - PullRequest
0 голосов
/ 25 мая 2020

Мне нужно стандартизировать таблицу ребер ориентированного графа. Цель состоит в том, чтобы добавить в таблицу (EdgesExport) потенциальные ребра в виде пары узлов (в столбцах с тегами srctagged и dstagged), оставляя новые строки пустыми в других столбцах. Для этого я создаю матрицу всех возможных пар узлов. А затем удалите уже существующие из EdgesExport. Попытка по одному работает:

head(edges2add)   
t=c(EdgesExport$srctagged[1],EdgesExport$dstagged[1])
t #check this is ok
head(edges2add[-(edges2add[,1]==t[1] & edges2add[,2]==t[2]),])

Когда я превращаю это в al oop, он работает для нескольких первых итераций (всего 3 из 20), а затем удаляет всю матрицу (которая имеет 56 rows), в результате получается 0 строк:

for (i in 1:nrow(EdgesExport))
    {t=c(EdgesExport$srctagged[i],EdgesExport$dstagged[i])
     print(t)
     edges2add = edges2add[-(edges2add[,1]==t[1] & edges2add[,2]==t[2]),]
     print(nrow(edges2add))
     print(head(edges2add))
     }

Я не получаю никаких сообщений об ошибках или предупреждениях. Вот вывод sessionInfo ():

R version 3.6.3 (2020-02-29)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)

Matrix products: default

locale:
[1] LC_COLLATE=French_France.1252  LC_CTYPE=French_France.1252    LC_MONETARY=French_France.1252
[4] LC_NUMERIC=C                   LC_TIME=French_France.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.6.3 tools_3.6.3

Библиотека igraph загружается на этом этапе скрипта. Ты хоть представляешь, почему после 3 итераций l oop не корректно? Заранее спасибо, Максим :) (построено с помощью al oop rbind с временным вектором t, как вы можете видеть):

structure(c("None", "None", "None", "None", "None", "None", "None", 
"Degr1", "Degr1", "Degr1", "Degr1", "Degr1", "Degr1", "Degr1", 
"Distr", "Distr", "Distr", "Distr", "Distr", "Distr", "Distr", 
"DistrDegr1", "DistrDegr1", "DistrDegr1", "DistrDegr1", "DistrDegr1", 
"DistrDegr1", "DistrDegr1", "Prod", "Prod", "Prod", "Prod", "Prod", 
"Prod", "Prod", "ProdDegr1", "ProdDegr1", "ProdDegr1", "ProdDegr1", 
"ProdDegr1", "ProdDegr1", "ProdDegr1", "ProdDistr", "ProdDistr", 
"ProdDistr", "ProdDistr", "ProdDistr", "ProdDistr", "ProdDistr", 
"ProdDistrDegr1", "ProdDistrDegr1", "ProdDistrDegr1", "ProdDistrDegr1", 
"ProdDistrDegr1", "ProdDistrDegr1", "ProdDistrDegr1", "Degr1", 
"Distr", "DistrDegr1", "Prod", "ProdDegr1", "ProdDistr", "ProdDistrDegr1", 
"None", "Distr", "DistrDegr1", "Prod", "ProdDegr1", "ProdDistr", 
"ProdDistrDegr1", "None", "Degr1", "DistrDegr1", "Prod", "ProdDegr1", 
"ProdDistr", "ProdDistrDegr1", "None", "Degr1", "Distr", "Prod", 
"ProdDegr1", "ProdDistr", "ProdDistrDegr1", "None", "Degr1", 
"Distr", "DistrDegr1", "ProdDegr1", "ProdDistr", "ProdDistrDegr1", 
"None", "Degr1", "Distr", "DistrDegr1", "Prod", "ProdDistr", 
"ProdDistrDegr1", "None", "Degr1", "Distr", "DistrDegr1", "Prod", 
"ProdDegr1", "ProdDistrDegr1", "None", "Degr1", "Distr", "DistrDegr1", 
"Prod", "ProdDegr1", "ProdDistr"), .Dim = c(56L, 2L), .Dimnames = list(
    c("t", "t", "t", "t", "t", "t", "t", "t", "t", "t", "t", 
    "t", "t", "t", "t", "t", "t", "t", "t", "t", "t", "t", "t", 
    "t", "t", "t", "t", "t", "t", "t", "t", "t", "t", "t", "t", 
    "t", "t", "t", "t", "t", "t", "t", "t", "t", "t", "t", "t", 
    "t", "t", "t", "t", "t", "t", "t", "t", "t"), NULL))

Я просто попробовал другой способ, на этот раз свернувшись на 6-й итерации. До сих пор не могу объяснить почему, но прогресс есть:

edges2add=as.matrix(edges2add)
t=matrix(nrow=20,ncol=2)
t[,1]=EdgesExport$srctagged
t[,2]=EdgesExport$dstagged

str(t)
t[1,2]
EdgesExport$dstagged[1]
str(edges2add[-(edges2add[6,]==t[6,]),])

for (i in 1:nrow(t)) {edges2add = edges2add[-(edges2add[i,]==t[i,]),]
                      print(t[i,])
                      print(nrow(edges2add))
                      print(head(edges2add))
}
str(edges2add)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...