我在很大的数据帧上运行了很多不同的操作。它开始成为维护的痛苦,特别是一些数据格式不正确,我正在寻找一些方法来让我的生活更轻松。
问题在于,在操作流程的某一点上,NA被引入了几行,包括id(当然是由于一些不好的子集)。现在我无法轻易找到罪魁祸首,因为我每次都有str()它,或者在Rstudio中查看()它...这需要时间,我已经做了一次而没有发现错误的操作......
所以我很好奇是否有一些软件包可以解决这个问题,或者是一种编程“daemon-like”的方法,以便在出现特定值时弹出警告消息。
while循环没有帮助,因为它会评估所有语句,当然,在某一时刻条件不正确,并且当它停止时它不会打印...
while(nrow(df[is.na(df$id),]) > 0){
statements OK
breaking statement
other OK statements
}
我会寻找其他选择,但我想问之前......
编辑:感谢有用的评论,我肯定会更多地了解这些功能。但是我也尝试建立自己的监视功能(参见我的回答)。
答案 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创建的第四个功能,所以我想可能会有改进......