检查是否存在与字符(0)不同的列表元素

时间:2015-05-18 12:52:24

标签: database r loops sql-update

我有一个函数来更新数据库以获取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查询都已正确完成?

我尝试使用anyall来电,但没有成功:

> 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"

2 个答案:

答案 0 :(得分:0)

你必须lapply超过res。如lapply(res, identical, character(0L))

答案 1 :(得分:0)

您可以尝试:

all(vapply(res,length,1L)==0)

这将评估res的每个组件的长度,如果所有元素的长度都为零(TRUE为),则返回character(0)