Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将死w/NA元素_R_Assert - Fatal编程技术网

R 将死w/NA元素

R 将死w/NA元素,r,assert,R,Assert,我想使用R中的包来确定字符向量中的所有元素(a)是NA还是(b)符合regex模式。(在此特定情况下,元素只能包含数字。) 下面的调用返回“对“x”的断言失败:必须符合模式“^\d{2,3}$”,即使any.missing参数设置为TRUE也是如此。有没有一种自然简洁的方法来测试这个将死?如果使用正则表达式模式,any.missing参数基本上被忽略了吗 x <- c("11", "22", "333", NA_character_) pattern <- "^\\d{2,3}$"

我想使用R中的包来确定字符向量中的所有元素(a)是NA还是(b)符合regex模式。(在此特定情况下,元素只能包含数字。)

下面的调用返回“对“x”的断言失败:必须符合模式“^\d{2,3}$”,即使
any.missing
参数设置为TRUE也是如此。有没有一种自然简洁的方法来测试这个将死?如果使用正则表达式模式,
any.missing
参数基本上被忽略了吗

x <- c("11", "22", "333", NA_character_)
pattern <- "^\\d{2,3}$"

checkmate::assert_character(x,  pattern=pattern, any.missing=TRUE)

接下来,当提供正则表达式模式时,
any.missing
参数不再被忽略。

这是可复制的,并且与文档相反。我建议你把它提高到最低限度。在此期间,我建议您恢复到
testit
变量,甚至是
stopifnot(grepl(pattern,x)| is.na(x))
。另一个解决方法是
checkmate::assert_字符(x[!is.na(x)],pattern=pattern,any.missing=TRUE)
(从技术上讲,
any.missing
参数是多余的,但可以保留,以便以后删除
[!is.na(x)]
)问题似乎出在。
checkCharacterPattern
子例程没有考虑
any.missing
all.missing
参数。missing值总是从
grepl
返回
FALSE
。谢谢大家。作为
testit::assert(
  "Any existing elements must be missing or only digits",
  all(is.na(x) | grepl(pattern, x)
)