R: Построение столбцов матрицы с использованием формул - PullRequest
3 голосов
/ 29 ноября 2011

Потратив всего час на поиск ошибки «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 решило проблему.

1 Ответ

6 голосов
/ 29 ноября 2011

Исходя из цепочки комментариев, следующей за вопросом, ясно, что было проблемой в R-2.12.1, а не для R-2.14.0.

Раздел R-2.13.0 файла NEWS предположительно ссылается на это исправление ошибки, когда упоминается, что

* plot(<formula>, data=<matrix>,..) now works in more cases;
  similarly for points(), lines() and text().

(1017 * этот ответ основан на раскопках Тайлера и многочисленных постерах выше. Я поднимаю выводы этого потока, чтобы ответить на статус, как, возможно, полезное напоминание о том, какие исправления ошибок включены в каждую версию R.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...