基数R中的逻辑过载

亚当·奥

我想简化一些小的文本生成代码。当不使用该函数时,程序的默认参数为长度为0的字符。我对简单的东西感兴趣

if (nchar(expr) > 0) ...

所以我创建了以下内容

as.logical <- function(x, ...) UseMethod("as.logical")
as.logical.default <- function (x, ...)  base::as.logical(x, ...)
as.logical.character <- function (x, ...) nchar(x) > 0

如果我在命令行中尝试一些示例,则可以正常工作

> as.logical(letters)
 [1] TRUE TRUE TRUE ...

但是有趣的是,cond“逻辑”向量没有尝试应用as.logical它似乎在以下其他情况下使用:

> if (1) print('Has')
[1] "Has"
> if ('Has') print(1)
Error in if ("Has") print(1) : argument is not interpretable as logical

我该如何cond评估并且不能愚弄它使用我的函数?

弗里克先生

从源头上看,基本的Rif语句不会以通用的方式对逻辑进行隐式强制。这是代码它确实asLogical在表达式上调用了C代码,但是该版本的版本asLogical不进行泛型调度(因为默认as.logical值不是泛型)。如果传入一个字符串,它将仅运行LogicalFromString,该字符串仅将有限数量的硬编码字符串识别为TRUE:“ T”,“ True”,“ TRUE”,“ true”。除非您想编写某种“ if”函数类型的东西(您不能真正编写自己的语句),否则无法在用户空间中更改该行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章