Ответ указывается в ?arrows
:
Направление стрелки нулевой длины не определено, и, следовательно, так же, как и направление стрелок.Чтобы учесть ошибку округления, стрелки не указываются (с предупреждением) на любой стрелке длиной менее 1/1000 дюйма.
Что, конечно, вызывает вопрос - Что такое дюйм?
То, что вопросы и ответы были сосредоточены вокруг связанной с этим проблемы, но здесь также можно применить уроки:
png('~/Desktop/arrows.png', height = 240, width = 240)
plot(NA, xlim = c(-1, 1), ylim = c(-3, 3))
# get each arrow's length by converting x and y coords to inches
units = par(c('usr', 'pin'))
x_to_inches = with(units, pin[1L]/diff(usr[1:2]))
y_to_inches = with(units, pin[2L]/diff(usr[3:4]))
dists = sqrt((x_to_inches * diff(x))**2 + (y_to_inches * diff(y))**2)
# which arrows are the culprits?
idx = which(dists < .001)
# option: remove the arrow base & head from the culprit pair(s)
arrows(x[-c(N, idx)], y[-c(N, idx)],
x[-c(1L, idx + 1L)], y[-c(1L, idx + 1L)])
dev.off()
Вы можете увидеть здесь в Rисточник, что этот подход почти идентичен тому, который использовался (на уровне C) для генерации этого предупреждения, во-первых.
Что-то, что всегда мешало мне, но никогда не было достаточно, чтобы сесть и разобрать его.