【问题标题】:Clarifying the plot command in R澄清 R 中的绘图命令
【发布时间】:2014-02-22 12:14:46
【问题描述】:

我正在关注this 教程在 R 中实现支持向量机。

我在阐明 plot 命令的工作时遇到了麻烦

plot(x,col=ifelse(y>0,1,2))

length(x) 确认 x 的大小为 300,但 length(ifelse(y>0,1,2) 显示为 150。

如果有 300 个 x 值但只有 150 个 y 值,那么绘图是如何工作的?

当我尝试时

plot(x,ifelse(y>0,1,2)) 它显示了预期的错误,即,

Error in xy.coords(x, y, xlabel, ylabel, log) : 
  'x' and 'y' lengths differ

col=ifelse(y>0,1,2) 是什么使它起作用?

【问题讨论】:

  • 确保length(y) 等于length(x)。一些 y 坐标似乎丢失了,因此出现了错误。
  • ifelse(y>0,1,2) 提供给col 时,它会被回收以适应x 的长度。

标签: r plot svm


【解决方案1】:

通常,R 知道回收,即在许多情况下,R 回收向量如果它们没有所需的长度,例如

1:4 + 1:2

向量1:2 被回收,所以它实际上变成了c(1,2,1,2) 以适应另一个向量的长度。现在,我们可以对向量求和

c(1,2,3,4)  + c(1,2,1,2)

col 参数的示例中也会发生同样的情况。向量col 被回收,因此它适合x 的长度。 但是如您所见,并非所有参数值都总是自动回收。对于plot 中的xy 参数,情况并非如此。这是有道理的,因为如果这两个向量的长度不匹配,这可能是一个错误。

【讨论】:

  • 只有当向量存储在 col 等变量中时才有效?如果我们直接使用ifelse的输出,它不会回收吗?
  • 不,这没有什么区别。试试plot(1:4, col=1:2); col <- 1:2; plot(1:4, col=col)。两者都会给你相同的结果。
  • 我阅读了您的编辑,理解了它,但仍然不明白为什么后一种情况可能是一个错误,但如果将其存储在 col 中,则不是t.
  • @wrahool 如果你没有命名你的参数,那么重要的是它们的顺序:plot 的第二个参数通常是 y= 所以你的调用 plot(x,ifelse(...)) 被解释为好像 ifelse(...)是您为y 提议的值,而不是colcol 可以回收,但y 不能回收。
猜你喜欢
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多