R / Rstudio:有连续监控某些值的监视功能吗?

时间:2016-07-13 15:08:45

标签: r rstudio

我在很大的数据帧上运行了很多不同的操作。它开始成为维护的痛苦,特别是一些数据格式不正确,我正在寻找一些方法来让我的生活更轻松。

问题在于,在操作流程的某一点上,NA被引入了几行,包括id(当然是由于一些不好的子集)。现在我无法轻易找到罪魁祸首,因为我每次都有str()它,或者在Rstudio中查看()它...这需要时间,我已经做了一次而没有发现错误的操作......

所以我很好奇是否有一些软件包可以解决这个问题,或者是一种编程“daemon-like”的方法,以便在出现特定值时弹出警告消息。

while循环没有帮助,因为它会评估所有语句,当然,在某一时刻条件不正确,并且当它停止时它不会打印...

while(nrow(df[is.na(df$id),]) > 0){
statements OK
breaking statement
other OK statements
}

我会寻找其他选择,但我想问之前......

编辑:感谢有用的评论,我肯定会更多地了解这些功能。但是我也尝试建立自己的监视功能(参见我的回答)。

1 个答案:

答案 0 :(得分:0)

好吧,我想我终于建立了类似的东西:

这是一个为每行提供文件行的功能,直到满足给定条件:

watchIt <- function(file,watchexpression,startwatchline){
  line <- 1
  sourceList <- scan(file = "source_test.R", what="character", sep="\n", blank.lines.skip = FALSE)
  maxLines <- length(sourceList)
  while(startwatchline > line && maxLines >= line){
    cat("l")
    eval(parse(text=sourceList[line]))
    line <- line+1
    cat(line)
    cat(" ")
  }
  while(eval(parse(text=watchexpression)) == FALSE && maxLines >= line){
    cat(" L")
    eval(parse(text=sourceList[line]))
    line <- line+1
    cat(line)
    cat(" ")
  }
  if(maxLines <= line) {
    cat("End of file reached without condition getting TRUE")
  }
  else{
  cat("Condition evaluated to TRUE on line :")
  cat(line)
  cat("\n")
  cat(sourceList[line])
  }
}

这就是我使用它的方式:

watchIt("source_test.R","nrow(df[is.na(df$id),]) > 0",10)

这将“source_test.R”放在一个列表中,每一行都是一个新的列表项,并且从第10行开始,我测试结果数据帧是否为id字段中的NA。当条件评估为TRUE或达到列表项的结尾时,执行将停止。

我还在等待其他一些/更好的答案......而且,这是我设法用R创建的第四个功能,所以我想可能会有改进......