使用公式绘制矩阵列

3

刚刚我花了一个小时去追踪我的代码中的'matrix vs data.frame'错误,我非常希望能够理解以下内容:

tmp <-
  structure(c(4L, 7L, 5L, 12L, 6L, 11L, 9L, 3L, 1L, 2L, 10L, 8L),
            .Dim = c(6L, 2L), .Dimnames = list(NULL, c("col1", "col2")))

## 1. This works:
plot(col2 ~ col1, data = tmp)

## 2. This doesn't work:
plot(col2 ~ col1, data = tmp, main = "hello")
## -> Error in FUN(X[[1L]], ...) : numeric 'envir' arg not of length one

## 3. This works:
plot(col2 ~ col1, data = as.data.frame(tmp), main = "hello")

在我看来,要么1和2都能工作,要么都会失败。1可以工作而2失败的事实让我在尝试让我的代码工作时走得很远。

我的问题是:为什么有时可以使用公式来绘制矩阵列,而不是总是或从不?当我添加一个标题到我的图表时会发生什么导致它失败?

编辑: 我怀疑我一定是自己弄坏了什么东西,所以我已经在多个新的R实例中尝试了这个确切的代码。我的sessionInfo是:

> sessionInfo()
R version 2.12.1 (2010-12-16)
Platform: i686-pc-linux-gnu (32-bit)

locale:
 [1] LC_CTYPE=en_CA.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_CA.UTF-8        LC_COLLATE=en_CA.UTF-8    
 [5] LC_MONETARY=C              LC_MESSAGES=en_CA.UTF-8   
 [7] LC_PAPER=en_CA.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     
> 

编辑:

这是在失败的plot命令后跟踪的结果:

> > traceback()
4: FUN(X[[1L]], ...)
3: lapply(dots, eval, data, parent.frame())
2: plot.formula(col2 ~ col1, data = tmp, main = "hello")
1: plot(col2 ~ col1, data = tmp, main = "hello")
> 

编辑:

升级到2.14版本已解决该问题。


数字2对我有效(没有错误,生成一个标题为“hello”的图形)。我可以通过 plot(col2 ~ col1, data = c(1,2), main = "hello")plot(col2 ~ col1, data = as.vector(tmp), main="hello") 获得您的错误。使用 plot(col2 ~ col1, data = as.vector(tmp)) 会导致类似但不同的错误,这是令人惊讶的。 - Brian Diggs
这不应该发生(当我运行此代码时,对我来说并没有发生)。您可以尝试在干净的R会话中仅运行此代码,以进行双重检查吗? - joran
在运行2.14.0的Mac上没有错误。需要更多信息,如上所述:sessionInfo(),干净运行的报告,traceback() - IRTFM
2
我在R 2.12.1中也看到了同样的问题(我很惊讶我还在我的机器上安装了它);我不知道为什么会这样,但显然这是一个错误,在2.12.1和2.14.0之间的某个时候已经修复了。 - Brian Diggs
值得一提的是,R 2.13.0 的 NEWS 文件可能在提到这个问题时指的是,"* plot(<formula>, data=<matrix>,..) 现在可以在更多情况下工作;points()、lines() 和 text() 同理。" - Josh O'Brien
显示剩余7条评论
1个回答

6
根据问题后面的评论线程,很明显这是一个R-2.12.1版本中存在的问题,在R-2.14.0版本中已经得到解决。
当NEWS文件提及到这个bug修复时,它很可能指的是R-2.13.0版本中的这个修复。
* plot(<formula>, data=<matrix>,..) now works in more cases;
  similarly for points(), lines() and text().

注意:此答案基于Tyler和上面众多帖子的挖掘。我将那个线程的结论提升为答案状态,可能是一个有用的提示,说明每个版本的R中包含哪些错误修复。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接