Мне нужно стандартизировать таблицу ребер ориентированного графа. Цель состоит в том, чтобы добавить в таблицу (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)