R不一致性:为什么add = T有时会起作用,有时不在plot()函数中?

为什么R与plot()函数中的add参数不一致? 它有时有效,有时不起作用! 在这个例子中,它使用参数add=TRUE而没有问题:

plot(0:10, 0:10*3)
plot(identity, add=TRUE, xlim=c(0,10))
plot(function (x) { sin(x)*10 }, add=TRUE, xlim=c(0,10))

但是当我问题

plot(c(2, 3, 4), c(20,10,15), add=TRUE, pch="A")

它不工作! 它说“添加”不是图形参数。

请不要写我应该使用points()来代替。 我知道我可以使用它。 我想了解R的奇怪行为 - 为什么它有时会工作,有时候不行?


这确实是令人讨厌和不一致的,但它是可以解释的。

编辑identity是一个内置对象(身份函数)的事实避免了我(所以问题实际上是可重现的)。

identity是一个类的对象- function -具有plot方法( plot.function )与add参数,而默认的plot方法具有add参数。

一般来说,当试图绘制对象bar ,你应该尝试class(bar) ; 如果它是类foo则尝试使用methods(class="foo")来查看它是否有plot方法或methods("plot")以查看plot.foo存在。 尝试?plot.foo查看帮助,或者使用plot.foogetAnywhere(plot.foo)查看函数本身。


这是因为当你调用plot(0:10, 0:10*3) plot(c(2, 3, 4), c(20,10,15)) plot(0:10, 0:10*3)plot(c(2, 3, 4), c(20,10,15)) ,你间接调用了plot.default() ,这又会调用plot.xy() ,而您提到的另外两个调用正在运行plot.function()addplot.function()的参数,但不适用于plot.xy()

您可以通过设置par(new = TRUE)来解决这种不一致问题,但是您需要确保不添加新轴标签或重新绘制坐标轴。 编辑:正如在评论中指出的,你必须确保范围与前面的情节相同。 例如:

plot(0:10, 0:10*3)
plot(identity, add=T, xlim=c(0,10))
plot(function (x) { sin(x)*10 }, add=T, xlim=c(0,10))
par(new = TRUE)
plot(c(2, 3, 4), c(20,10,15), pch="A",
     axes = FALSE, ## don't redraw the axes 
     xlab = '', ylab = '', ## no fresh axis labels
     xlim = c(0,10), ylim = c(0,30)) ## keep the same limits as before

正如Ben Bolker提到的, methods('plot')会告诉你在运行plot()时可以调用什么方法 - 不同的方法有不同的参数,当你调用args(plot.foo)或者在帮助页面时会列出不同的参数?plot.foo

链接地址: http://www.djcxy.com/p/30823.html

上一篇: R inconsistency: why add=T sometimes works and sometimes not in the plot() function?

下一篇: std::async and std::future behaviour