如果您经常使用arrows
函数,则可能会遇到以下警告:
set.seed(438520)
N = 1000
x = rnorm(N, sd = .1)
y = rnorm(N)
png('~/Desktop/arrows.png', height = 240, width = 240)
plot(NA, xlim = c(-1, 1), ylim = c(-3, 3))
arrows(x[-N], y[-N], x[-1L], y[-1L])
dev.off()
警告信息: 在箭头(x [-N],y [-N],x [-1L],y [-1L])中: 零长箭头的角度不确定,因此被跳过
我们如何确定哪些箭头有误,以便在我们认为合适的情况下进行处理?
答案 0 :(得分:3)
答案由?arrows
暗示:
长度为零的箭头的方向不确定,因此箭头的方向也不确定。为了避免出现舍入错误,长度小于1/1000英寸的任何箭头都将省略箭头(带有警告)。
当然会问一个问题-What is an inch?
该问答集中在一个相关的问题上,但是学习也可以在这里进行:
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源代码中看到here,该方法几乎与最初用于生成此警告的方法相同(在C级别)。
这总是困扰我,但永远不足以坐下来将其散列出来。