【发布时间】:2021-09-15 16:57:57
【问题描述】:
我正在尝试运行以下 R 代码:
X <- matrix(0, n_countries, n_languages)
for (index in 2:n_edges)
{
i <- edgelist[index, 1]
j <- edgelist[index, 2]
perc <- edgelist[index, 3]
if (perc > 0 )
X[i,j] = 1
}
edgelist 是我读入的 .csv 文件,前几行如下所示:
V1 V2 V3
1 % bip posweighted NA NA
2 31 18 1.000
3 221 28 0.018
4 185 12 0.000
5 38 87 0.031
R 说if 语句中有错误,
Error in `[<-`(`*tmp*`, i, j, value = 1) :
no 'dimnames' attribute for array
我已尝试应用以下解决方案:
-
删除第一行,NA 值与
edgelist <- edgelist[-c(1),] -
并将列名更改为整数
colnames(edgelist) <- c(1,2,3)
这些似乎都不起作用,因为我不断收到同样的错误。我真的不确定如何解决这个问题,因为我不明白为什么 for 循环不只是将行读入矩阵。任何建议将不胜感激。
【问题讨论】:
-
那是因为你的边缘列表是模式字符而不是整数/数字。在这种情况下,例如
edgelist[index, 1]会给你"31"而不是31。您可能需要显式转换为数字 -
我申请了
edgelist_num <- as.numeric(unlist(edgelist)),但不幸的是,出现了同样的错误。 -
您在转换为数字时是否收到了一些警告?检查下面的答案
-
是的,迈克尔的回答很完美。