Возможно противоречивое поведение в qplot ()? - PullRequest
2 голосов
/ 28 июля 2010

Я пытаюсь использовать qplot () для построения простых временных рядов, как это можно сделать с помощью plot ().Переменная x - это as.POSIXlt, а y - просто непрерывное измерение.Вот код с некоторыми краткими комментариями.Любая помощь в том, почему эти data.frames ведут себя по-разному, будет очень признателен.Как вы можете видеть ниже, я могу обойти эту проблему, но мне любопытно, почему это не работает, как я ожидал.

Несколько подробностей:
платформа: OS X 10.6.4
R версия: R 2.11.0

Отказ от ответственности: я понимаю, что могу покопаться в исходном коде и рисункеэто сам.Я никогда не использовал SO и думал, что это может быть хорошей темой для этого форума.

Отказ от ответственности (2): я новичок в ggplot2

library(ggplot2)
ws.dat <- read.csv("~/path/to/filename.csv",header=F)
names(ws.dat) <- c("s","t","w")
ws.dat$new.t <- as.POSIXlt(ws.dat$t)
ws.dat[1:5,]
  ##       s                   t    w               new.t
  ## 1 29522 2005-07-02 00:00:00 5.00 2005-07-02 00:00:00
  ## 2 29522 2005-07-02 00:10:00 5.29 2005-07-02 00:10:00
  ## 3 29522 2005-07-02 00:20:00 5.48 2005-07-02 00:20:00
  ## 4 29522 2005-07-02 00:30:00 5.54 2005-07-02 00:30:00
  ## 5 29522 2005-07-02 00:40:00 5.49 2005-07-02 00:40:00


## the following works
plot(as.POSIXlt(ws.dat$t), ws.dat$w)

## doesn't work
qplot(as.POSIXlt(t), w, data = ws.dat)
  ## Error in if (length(range) == 1 || diff(range) == 0) { : 
  ## missing value where TRUE/FALSE needed

## doesn't work
ws.dat$new.t <- as.POSIXlt(ws.dat$t)
qplot(new.t, w, data = ws.dat)
  ## Same error as above

## Note - I could find a more elegant way of doing this; I'm just trying
##   to reproduce as fast as possible.
new.df <- data.frame(ws.dat$new.t, ws.dat$w)
new.df[1:5,]
  ##          ws.dat.new.t ws.dat.w
  ## 1 2005-07-02 00:00:00     5.00
  ## 2 2005-07-02 00:10:00     5.29
  ## 3 2005-07-02 00:20:00     5.48
  ## 4 2005-07-02 00:30:00     5.54
  ## 5 2005-07-02 00:40:00     5.49

## 'works as *I* would expect'; this is != 'works *as* expected' 
qplot(ws.dat.new.t, ws.dat.w, data = new.df)

Ответы [ 2 ]

2 голосов
/ 28 июля 2010

Использование POSIXct - POSIXlt не подходит для включения в кадры данных. Когда вы используете data.frame для создания переменной, она автоматически приводится к POSIXct.

1 голос
/ 28 июля 2010

Когда сомневаешься, посмотри на класс передаваемых объектов! Спасибо, Хэдли.

class(new.df$ws.dat.new.t)
## [1] "POSIXt"  "POSIXct"  <--- ct!!!!
class(as.POSIXlt(ws.dat$tt))
## [1] "POSIXt"  "POSIXlt"  <--- lt!!!!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...