R/Rstudio:是否有监视功能来持续监视某些值?
我在一个相当大的数据帧上运行了很多不同的操作。这对维护来说开始是一件痛苦的事情,特别是一些数据格式不正确,我正在寻找一些选项来简化我的生活 问题在于,在操作流程中的某一点上,NAs被引入了几行,包括id(当然是由于某些错误的子集)。现在我无法轻易找到罪魁祸首,因为我每次都可以在Rstudio中查看它。。。这需要时间,我已经做了一次,但没有发现坏的操作 所以我很好奇,是否有什么软件包可以解决这个问题,或者有什么方法可以编写“类似守护进程”的程序,在出现特定值时弹出警告消息 while循环没有帮助,因为它计算所有语句,当然,在某一点上,条件不是真的,当它停止时,它不会打印R/Rstudio:是否有监视功能来持续监视某些值?,r,rstudio,R,Rstudio,我在一个相当大的数据帧上运行了很多不同的操作。这对维护来说开始是一件痛苦的事情,特别是一些数据格式不正确,我正在寻找一些选项来简化我的生活 问题在于,在操作流程中的某一点上,NAs被引入了几行,包括id(当然是由于某些错误的子集)。现在我无法轻易找到罪魁祸首,因为我每次都可以在Rstudio中查看它。。。这需要时间,我已经做了一次,但没有发现坏的操作 所以我很好奇,是否有什么软件包可以解决这个问题,或者有什么方法可以编写“类似守护进程”的程序,在出现特定值时弹出警告消息 while循环没有帮助,
while(nrow(df[is.na(df$id),]) > 0){
statements OK
breaking statement
other OK statements
}
我会寻找其他的选择,但我想问之前
编辑:谢谢你的有用评论,我肯定会更多地研究这些功能。不过,我也尝试为自己构建一个手表功能(请参见我的答案)。好吧,我想我终于构建了类似的功能: 这是一个函数,用于在满足给定条件之前为每行源文件行:
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])
}
}
这将“source_test.R”放在一个列表中,每一行都有一个新的列表项,从第10行开始,我在id字段中测试结果数据帧是否为NAs。当条件求值为TRUE或到达列表项的末尾时,执行停止
我仍然在等待其他/更好的答案。。。此外,这是我在R中创建的第四个函数,因此我想可能需要对其进行改进…好的,我想我最终构建了类似的功能: 这是一个函数,用于在满足给定条件之前为每行源文件行:
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])
}
}
这将“source_test.R”放在一个列表中,每一行都有一个新的列表项,从第10行开始,我在id字段中测试结果数据帧是否为NAs。当条件求值为TRUE或到达列表项的末尾时,执行停止
我仍然在等待其他/更好的答案。。。此外,这是我在R中创建的第四个函数,因此我想可能需要对其进行改进…基本上您正在调试。尝试在例程中包含一些将在屏幕上输出进度/状态的
print
语句。否则,这可能会有帮助:您可以使用expr
向函数添加browser()
命令,该命令在调试所需的条件为meter时计算为TRUE。尝试在例程中包含一些将在屏幕上输出进度/状态的print
语句。否则,这可能会有帮助:您可以向函数中添加browser()
命令,并使用expr
在满足条件时计算为TRUE。我认为您的函数在大多数情况下都无法工作。例如,在使用lappy()和定义特殊函数时,有多行分割的命令。您的计算是逐行计算的,它假设每一行都是自包含的。。。这种情况很少发生。当然,它并不完美,但即使在你的建议中,它也会给我一个提示,告诉我应该去哪里看,不是吗?不管怎样,多亏了它,我在脚本中找到了罪魁祸首,解决了我的问题,如果这能帮助其他人。。。Multumesc:)我认为您的函数在大多数情况下都不起作用。例如,在使用lappy()和定义特殊函数时,有多行分割的命令。您的计算是逐行计算的,它假设每一行都是自包含的。。。这种情况很少发生。当然,它并不完美,但即使在你的建议中,它也会给我一个提示,告诉我应该去哪里看,不是吗?不管怎样,多亏了它,我在脚本中找到了罪魁祸首,解决了我的问题,如果这能帮助其他人。。。Multumesc:)