R / Rstudio:是否有监视功能可以持续监视某些值?
R / Rstudio : is there a watch function to continuously monitor some values?
我在相当大的数据帧上有很多不同的操作 运行。维护开始变得很痛苦,尤其是一些数据格式不正确的情况下,我正在寻找一些让我的生活更轻松的选择。
问题在于,在操作流程的某个时刻,NA 被引入多行,包括 id(当然是由于一些错误的子集)。现在我无法轻易找到罪魁祸首,因为我每次都在 Rstudio 中对它进行 str() 或 view() 它...这需要时间而且我已经做过一次但没有发现错误的操作...
所以我很好奇是否有一些程序包可以解决这个问题,或者有什么程序可以编程"daemon-like",以便在出现特定值时弹出警告消息。
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])
}
}
我就是这样使用它的:
watchIt("source_test.R","nrow(df[is.na(df$id),]) > 0",10)
这将 "source_test.R" 放入列表中,每行一个新列表项,并且从第 10 行开始,我测试生成的数据帧是否在 id 字段中为 NA。当条件评估为 TRUE 或到达列表项的末尾时,执行将停止。
我还在等待一些 other/better 的答案...此外,这是我在 R 中设法创建的第四个函数,所以我想可能需要对其进行改进。 ..
我在相当大的数据帧上有很多不同的操作 运行。维护开始变得很痛苦,尤其是一些数据格式不正确的情况下,我正在寻找一些让我的生活更轻松的选择。
问题在于,在操作流程的某个时刻,NA 被引入多行,包括 id(当然是由于一些错误的子集)。现在我无法轻易找到罪魁祸首,因为我每次都在 Rstudio 中对它进行 str() 或 view() 它...这需要时间而且我已经做过一次但没有发现错误的操作...
所以我很好奇是否有一些程序包可以解决这个问题,或者有什么程序可以编程"daemon-like",以便在出现特定值时弹出警告消息。
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])
}
}
我就是这样使用它的:
watchIt("source_test.R","nrow(df[is.na(df$id),]) > 0",10)
这将 "source_test.R" 放入列表中,每行一个新列表项,并且从第 10 行开始,我测试生成的数据帧是否在 id 字段中为 NA。当条件评估为 TRUE 或到达列表项的末尾时,执行将停止。
我还在等待一些 other/better 的答案...此外,这是我在 R 中设法创建的第四个函数,所以我想可能需要对其进行改进。 ..