3 回答
TA贡献1810条经验 获得超5个赞
这是因为您尝试访问数组之外的数组。
我将向您展示如何调试此类错误。
我设置 options(error=recover)
我跑reach_full_in <- reachability(krack_full, 'in') 我得到:
reach_full_in <- reachability(krack_full, 'in')
Error in reach_mat[i, alter] = 1 : subscript out of bounds
Enter a frame number, or 0 to exit
1: reachability(krack_full, "in")
输入1,我得到
Called from: top level
我键入ls()以查看当前的变量
1] "*tmp*" "alter" "g"
"i" "j" "m"
"reach_mat" "this_node_reach"
现在,我将看到变量的尺寸:
Browse[1]> i
[1] 1
Browse[1]> j
[1] 21
Browse[1]> alter
[1] 22
Browse[1]> dim(reach_mat)
[1] 21 21
您会看到alter已超出范围。22> 21。在行中:
reach_mat[i, alter] = 1
为避免此类错误,我个人这样做:
尝试使用applyxx功能。他们比for
我使用seq_along而不是1:n(1:0]
如果可以避免mat[i,j]索引访问,请尝试考虑矢量化解决方案。
编辑矢量化解决方案
例如,在这里我看到您没有使用set.vertex.attribute向量化的事实。
您可以替换:
# Set vertex attributes
for (i in V(krack_full)) {
for (j in names(attributes)) {
krack_full <- set.vertex.attribute(krack_full, j, index=i, attributes[i+1,j])
}
}
这样:
## set.vertex.attribute is vectorized!
## no need to loop over vertex!
for (attr in names(attributes))
krack_full <<- set.vertex.attribute(krack_full,
attr, value = attributes[,attr])
TA贡献1788条经验 获得超4个赞
如果这对任何人有帮助,我在将purr :: map()与我编写的函数结合使用时会遇到以下问题:
find_nearby_shops <- function(base_account) {
states_table %>%
filter(state == base_account$state) %>%
left_join(target_locations, by = c('border_states' = 'state')) %>%
mutate(x_latitude = base_account$latitude,
x_longitude = base_account$longitude) %>%
mutate(dist_miles = geosphere::distHaversine(p1 = cbind(longitude, latitude),
p2 = cbind(x_longitude, x_latitude))/1609.344)
}
nearby_shop_numbers <- base_locations %>%
split(f = base_locations$id) %>%
purrr::map_df(find_nearby_shops)
有时我会在样本中得到这个错误,但是大多数时候我不会。问题的根源是base_locations表(PR)中的某些状态不存在于states_table中,因此本质上我已经过滤掉了所有内容,并将一个空表传递给mutate。 这个故事的寓意是,您可能遇到数据问题,而没有(仅仅是)代码问题(因此您可能需要清理数据)。
TA贡献1934条经验 获得超2个赞
我有时会遇到相同的问题。我只能回答你的第二个要点,因为我不像其他语言那样熟练地使用R。我发现标准for循环有一些意外的结果。说x = 0
for (i in 1:x) {
print(i)
}
输出是
[1] 1
[1] 0
以python为例
for i in range(x):
print i
什么也没做。没有进入循环。
我希望如果x = 0在R中不输入该循环。但是,1:0是数字的有效范围。除了有一个if包装for循环的语句外,我还没有找到一个好的解决方法
- 3 回答
- 0 关注
- 2198 浏览
添加回答
举报