我有一个函数来更新数据库以获取ID列表(一次最多1,000个元素,对于Oracle DB中的IN
):
## Split the data frame into chunks of 1,000 elements max.
chunk <- split(df, ceiling(seq_along(df$id) / 1000))
res <- lapply(chunk,
function (x) sqlQuery(database,
paste0(
"UPDATE sometable
SET flag = '", batch.id, "'\n ",
"WHERE id IN (", paste0("'", x$id, "'", collapse=", "), ")")))
我想测试我的更新进展顺利。但是我找不到通过rODBC
调用获取更新行数的方法。
因此,作为一个(令人满意的!?)解决方法,我正在查看sqlQuery
的文本结果,并了解当一切顺利时,我会得到character(0)
结果的列表
现在,如何断言所有UPDATE
查询都已正确完成?
我尝试使用any
或all
来电,但没有成功:
> all(res == character(0))
[1] TRUE
> all(res != character(0))
[1] TRUE
> any(res != character(0))
[1] FALSE
> any(res == character(0))
[1] FALSE
我不明白,无论我的条件如何,结果总是TRUE
(适用于all
)或FALSE
(适用于any
)。
尝试all.equal
但没有取得更多成功:
> all.equal(character(0), res)
[1] "Modes: character, list" "Lengths: 0, 1" "names for current but not for target" "target is character, current is list"
答案 0 :(得分:0)
你必须lapply
超过res。如lapply(res, identical, character(0L))
答案 1 :(得分:0)
您可以尝试:
all(vapply(res,length,1L)==0)
这将评估res的每个组件的长度,如果所有元素的长度都为零(TRUE
为),则返回character(0)
。