我最近使用了purrr包中的每个命令,我不确定它是否按照预期的方式工作:
public PrescriptionNotationParser()
{
final NumberFormat numberFormat = NumberFormat.getInstance();
if (numberFormat instanceof DecimalFormat)
{
doseValueFormat = (DecimalFormat) numberFormat;
doseValueFormat.applyPattern("##.########");
decimalFormatSymbols = doseValueFormat.getDecimalFormatSymbols();
}
}
private double parse(final String valueStr)
{
try
{
return doseValueFormat.parse(valueStr).doubleValue();
}
catch (ParseException e)
{
return 0;
}
}
根据我的理解,每个检查列表中的每个元素是否满足某个条件,在我的例子中,它检查组件是否为NA。 在第一种情况下,它正确地返回false,因为只有第三个组件是NA。 但在第二种情况下,没有元素等于NA,它返回TRUE。这可能是个错误吗?
答案 0 :(得分:6)
这是因为every
期望谓词函数作为第二个参数,即在给定输入的情况下将返回单个逻辑值的函数。
当您将is.na
应用于b
,1:10
中的第一个(也是唯一的)元素时,您会得到一个10 FALSE
s的向量结果,这是然后通过rlang::is_false
测试虚假性。评估结果为FALSE
,因为10 FALSE
s的向量与单个FALSE
不同,后者会导致every
返回TRUE
。< / p>
如果使用谓词函数,结果与预期一致:
every(b, compose(any, is.na))
#> [1] FALSE
但奇怪的是,当不使用谓词函数时,如果需要长度为1的参数,则不会收到带有向量参数的警告。可能值得为此提出一个问题。