我正在努力弄清楚如何使用DECLARE @Date datetime
DECLARE @SevenBefore datetime
DECLARE @SevenAfter datetime
SET @Date = CreatedDate
SET @SevenBefore = DATEADD(day,-7,@Date)
SET @SevenAfter = DATEADD(day,7,@Date)
SELECT *
FROM <table>
WHERE <table> BETWEEN @SevenBefore AND @SevenAfter
来抛出错误。我已经阅读了几篇博客文章,Hadley在高级R和几篇SO帖子中的写作。但由于某种原因,它还没有沉没。我的虚拟示例如下:当向量的长度小于160时,停止执行该函数,而是向用户提供错误消息。很简单的东西,但显然不适合我。我觉得这个功能应该是这样的:
tryCatch()
但是当我运行该函数时,错误没有被捕获:
dummy_fun <- function(x) {
tryCatch(length(x) < 160 ,
error = function(e) {
print("An error message")
}
)
return(x*2)
}
即使长度明显小于160.
>dummy_fun(airquality$Ozone)
[1] 82 72 24 36 NA 56 46 38 16 NA 14 32 22 28 36 28 68 12 60 22 2 22 8 64 NA NA NA 46 90 230 74
[32] NA NA NA NA NA NA 58 NA 142 78 NA NA 46 NA NA 42 74 40 24 26 NA NA NA NA NA NA NA NA NA NA 270
[63] 98 64 NA 128 80 154 194 194 170 NA 20 54 NA 14 96 70 122 158 126 32 NA NA 160 216 40 104 164 100 128 118 78
[94] 18 32 156 70 132 244 178 220 NA NA 88 56 130 NA 44 118 46 62 88 42 18 NA 90 336 146 NA 152 236 168 170 192
[125] 156 146 182 94 64 40 46 42 48 88 42 56 18 26 92 36 26 48 32 26 46 72 14 28 60 NA 28 36 40
如果我使用>length(airquality$Ozone) < 160
[1] TRUE
或stop
,它会停止代码,但会自动打开调试窗口(至少在RStudio中),而我只是喜欢错误,告诉用户有一个错误:
stopifnot
并且停止:
dummy_fun2 <- function(x) {
stop(length(x) < 160 ,"An error message")
return(x*2)
}
dummy_fun2(airquality$Ozone)
所以,我很好奇是否有人知道我在这里做错了什么。我确定我会将其标记为重复的帖子,但我真的很遗憾。
答案 0 :(得分:2)
dummy_fun <- function(x) {
if (length(x) < 160) stop("x is not big enough")
return(x*2)
}
dummy_fun(airquality$Ozone)
dummy_fun(rep(1, 50))
dummy_fun(rep(1, 500))
答案 1 :(得分:1)
这是你在找什么?
onError <- function(){
print("An error message")
}
dummy_fun <- function(x) {
tryCatch(length(x) < 160 , finally = onError())
return(x*2)
}
dummy_fun(airquality$Ozone)
dummy_fun(airquality $臭氧)
[1] "An error message"
[1] 82 72 24 36 NA 56 46 38 16 NA 14 32 22 28 36 28 68 12 60 22 2 22 8 64 NA NA NA 46 90 230 74 NA NA NA
[35] NA NA NA 58 NA 142 78 NA NA 46 NA NA 42 74 40 24 26 NA NA NA NA NA NA NA NA NA NA 270 98 64 NA 128 80 154
[69] 194 194 170 NA 20 54 NA 14 96 70 122 158 126 32 NA NA 160 216 40 104 164 100 128 118 78 18 32 156 70 132 244 178 220 NA
[103] NA 88 56 130 NA 44 118 46 62 88 42 18 NA 90 336 146 NA 152 236 168 170 192 156 146 182 94 64 40 46 42 48 88 42 56
[137] 18 26 92 36 26 48 32 26 46 72 14 28 60 NA 28 36 40