如何处理函数内部"subscript out of bounds"错误?在 R 中



>我有一个这样的数据帧

Datetime <- c("2016-03-03 05:30:13", "2015-03-02 12:45:00", "2016-03-01 02:53:20", "2016-02-28 03:22:18", 
              "2016-03-02 09:42:10", "2016-03-01 20:55:50", "2016-02-28 21:14:10", "2016-02-26 05:42:16",
              "2016-03-02 08:31:15", "2016-03-02 09:13:10", "2016-03-01 00:45:14", "2016-02-26 05:56:00", 
              "2016-02-02 13:44:00", "2016-02-02 14:41:20", "2016-02-01 15:33:10", "2016-01-25 04:24:00",
              "2016-03-02 17:24:12", "2016-03-01 17:28:16", "2016-02-28 18:22:34", "2016-02-27 02:34:31")
ID <- c("A","A","A","A","B","B","B","B","C","C","C","C","D","D","D","D","E","E","E","E")
PT <- c(27,35,38,22,35,39,7,15,37,25,38,42,45,19,17,25,32,35,39,26)
df <- data.frame(Datetime,ID,PT)
df$Datetime <- as.POSIXct(df$Datetime,format="%Y-%m-%d %H:%M:%S")

我使用这些行来设置要子集的日期时间

today <- as.POSIXlt(Sys.time())
today$mday <- today$mday 
today$hour = "6"
today$min = "30"
today$sec = "0"
Back2weeks <- today   
Back1day <- today 
Back2weeks$mday <- Back2weeks$mday-14
Back1day$mday <- Back1day$mday-1

我正在尝试使用函数来创建 ggplot 以自动为每个 ID 输出绘图,我这样做是这样做

plots <- function(a) { 
  if (nrow(a)>0) { 
    ggplot(data = a,aes(x=Datetime,y=PT)) + geom_line(size = 0.5) + geom_point(size=3) 
  } 
}
lss<-list()
plot_lss<-list()
UniqueID <- summaryBy(ID~ID, data = df, FUN = function(x) { c(n = length(x)) } )
for (j in 1:(nrow(UniqueID))) 
{ 
  cat(j) 
  id <- as.character(UniqueID$ID[[j]]) 
  df1 <- subset(df, ID == id)
  df2 <- subset(df1, df1$Datetime>Back2weeks & df1$Datetime<today)
  lss[[j]] <- df2
  plotdata <- subset(df2, ID == id)
  plot_lss[[j]] <- plots(plotdata)
  print(plot_lss[[j]])
  Sys.sleep(0)
}

虽然这适用于前 3 个图,但第 4 个图不会显示,因为 ID 的日期时间超出了我的子集范围。现在该函数停在这里并抛出一个错误,说"plot_lss[[j]] 中的错误:下标超出界限",这很好,但我希望函数继续运行并输出日期时间在范围内的第 5 个图。在这种情况下,我将如何使函数保持运行到最后并防止退出循环?请提供您的想法。

也许

  plotdata <- subset(df2, ID == id)
  if(nrow(plotdata) == 0)
    next

够了吗?

相关内容

最新更新