如何检查向量是否是单个 NA 值,没有长度警告且没有抑制

2024-05-22

我有一个功能NA作为默认值,但如果没有NA应该是一个不限于大小 1 的字符向量。我有一个检查来验证这些,但是is.na当向量是字符向量时产生标准警告length大于1。

so_function <- function(x = NA) {
  if (!(is.na(x) | is.character(x))) {
    stop("This was just an example for you SO!")
  }
}

so_function(c("A", "B"))
#> Warning in if (!(is.na(x) | is.character(x))) {: the condition has length >
#> 1 and only the first element will be used

防止我提出的警告的一个选项是使用identical:

so_function <- function(x = NA) {
  if (!(identical(x, NA) | is.character(x))) {
    stop("This was just an example for you SO!")
  }
}

我的问题是,这个函数通常会将加载到 R 中的 Excel 工作表数据作为输入,并且NA由此产生的值通常是NA_character_, NA_integer_, and NA_real_, so identical(x, NA)经常FALSE当我真正需要它的时候TRUE.

对于更广泛的背景,我在为包创建的 S3 类中遇到了这个问题,下面的函数近似于我验证该类的多个属性的方式,也就是出现警告时。因此,我试图避免将抑制警告作为解决方案,因此有兴趣了解解决此问题的最佳实践。

Edit

为了使用例更清晰,这是验证类的属性,我想确保该属性是单个NA值,或任意长度的字符向量:

so_function(NA_character_) # should pass
so_function(NA_integer_) # should pass
so_function(c(NA, NA)) # should fail
so_function(c("A", "B")) # should pass
so_function(c(1, 2, 3)) # should fail

长度警告来自于使用if,它需要一个长度为 1 的向量,并且is.na这是矢量化的。

你可以使用any or all周围的is.na将其压缩为长度为 1 的向量,但可能存在边缘情况,它无法按您的预期工作,因此我将使用短路评估来检查它的长度是否为 1is.na check:

so_function <- function(x = NA) {
  if (!((length(x)==1 && is.na(x)) | is.character(x))) {
    stop("This was just an example for you SO!")
  }
}

so_function(NA_character_) # should pass

so_function(NA_integer_) # should pass

so_function(c(NA, NA)) # should fail
Error in so_function(c(NA, NA)) : This was just an example for you SO!

so_function(c("A", "B")) # should pass

so_function(c(1, 2, 3)) # should fail
Error in so_function(c(1, 2, 3)) : This was just an example for you SO!

另一种选择是使用NULL作为默认值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查向量是否是单个 NA 值,没有长度警告且没有抑制 的相关文章

随机推荐

  • Swift 语言中的抽象函数

    我想用 swift 语言创建一个抽象函数 是否可以 class BaseClass func abstractFunction How do I force this function to be overridden class SubC
  • 防止在单元格中更改行时重新格式化字符

    我有一个带有格式化文本的单元格 其中包含我想要用行更改替换的某个子字符串 子字符串是带有方括号的 enterkey 这是这个问题的一个变体在 Excel 中将 HTML 标记 替换为 Alt Enter https stackoverflo
  • SQL Server 端口 445 和 1433

    SQL Server 端口 445 和 1433 之间有什么区别以及每个端口的用途是什么 445不是SQL端口 是SMB端口 仅当您使用命名管道协议时 它才会参与 SQL Server 因为命名管道通过 SMB 进行传输 而这反过来又使用
  • 如何按关系的数量或成员对 Doctrine DQL 查询进行排序?

    我正在尝试创建一个查询 用于从 Doctrine 数据库中检索对象 并按特定一对多关系的成员数量排序 更具体地说 我有两个实体 Person 和 Federation 一个人可以是一个联盟的成员 人具有 联盟 关系 并且一个联盟可以有n人
  • “as”和“is”的真正用法

    我 从未 使用过as or is在 C 或任何支持该关键字的语言中 你用它来做什么 我的意思不是我如何使用它 我的意思是你实际上如何需要它 我也逃脱了做no在一个相当大的 C 项目中进行类型转换 我很自豪 所以考虑到我几乎从不进行类型转换
  • 如何从链表中删除节点?

    将整数添加到列表中工作正常 但删除和打印时出现问题 我对调试器还不友好 但我发现节点指针 first 有错误 它的值为 17891602 我不知道发生了什么事 include
  • 无法从视图转换为按钮

    我在这里遇到非常令人沮丧的问题 我有这个代码 Button b findViewById android R id button1 我收到了这个错误 类型不匹配 无法将表单视图转换为按钮 但是按钮1is一个按钮 在我的 XML 布局文档中
  • Android 上的嵌套滚动

    我们的活动中有一个主要的水平滚动视图 以及嵌套在其中的几个垂直滚动视图 这个想法是水平滚动 直到找到所需的垂直列表 然后上下滚动 理想情况下 一旦开始垂直滚动 我希望垂直滚动具有 锁定 现在会发生什么 如果您非常小心 您可以垂直滚动 但如果
  • 使用 pycharm 进行交互式 shell 调试

    我是 PyCharm 新手 我已经使用 IDLE 很长时间了 在IDLE中执行脚本后使用Python对象非常方便 有没有办法在使用 PyCharm 与交互式 python shell 执行后使用脚本对象 例如 我们有一个 测试 项目 其中包
  • 查找具有不同强度/亮度的相似图像

    假设我有如下图像 我可以选择什么来比较两个图像之间的相似度 显然它们是相同的图像 只是亮度不同 我找不到任何可行的方法 目前我最好的选择是训练 cnn 或自动编码器并比较输出的特征向量 但这似乎有点矫枉过正 任何提示将不胜感激 相当强大的工
  • Aurelia HttpClient 取消请求

    我正在尝试构建一个自动完成组件 并希望使其在键入时取消对服务器的未解析请求 我在 HttpClient 的文档中找不到与此相关的文档 它提到它是可以取消的 与获取不同 但没有提到如何取消 https aurelia io docs plug
  • 使用列中的日期范围扩展 pandas 数据框

    我有一个 pandas 数据框 其日期和字符串与此类似 Start End Note Item 2016 10 22 2016 11 05 Z A 2017 02 11 2017 02 25 W B 我需要将其扩展 转换为以下内容 在之间填
  • 有没有办法从 EntityManager 获取所有托管实体

    我正在设置一个基本的测试数据实用程序 并希望跟踪 EntityManager 处理的所有数据 有没有一种方法可以一次性获取 EntityManager 管理的所有内容 而不是仅仅为每个实体提供一堆列表 所以代替这个 EntityManage
  • ASP.Net 5 RC2 配置节绑定

    我刚刚将示例应用程序从 RC1 升级到 RC2 但我找不到如何将 appSettings json 文件的特定部分绑定到我自己的 POCO 样本位于https github com aspnet live asp net blob rc2
  • didReceiveRemoteNotification 将用户带到正确的视图

    我有一个聊天应用程序 当发送新消息时 我的服务器会发送推送通知 我遇到的问题是如何将用户带到正确的视图 我正在发送一个channelID在推送通知中 但我如何检索它并将用户带入实际对话 我使用此代码来检测何时单击推送通知 void appl
  • Android EditText默认数字键盘和允许文本[重复]

    这个问题在这里已经有答案了 可能的重复 EditText 默认带有数字键盘 但允许字母字符 https stackoverflow com questions 3544214 edittext with number keypad by d
  • 通过 HTML 或 JavaScript 禁用 Web 表单上的自动填充?

    有没有办法通过 HTML 或 JavaScript 禁用 Chrome 和其他浏览器中表单字段的自动填充 我不希望浏览器自动填写该浏览器以前用户的表单上的答案 我知道我可以清除缓存 但我不能依赖重复清除缓存 您可以在 HTML 的输入级别添
  • Android - 如何设置所有屏幕的背景颜色?

    维护字体和颜色样式的最佳实践是什么 我制作了一个 color xml 文件 用于更改按钮等单独元素的颜色 但我不确定 Android 希望开发人员如何组织他们的样式 例如 我希望所有屏幕都具有相同的背景颜色 我怎么做 我需要为每个 Acti
  • 在这种情况下,我如何处理 Function 和省略号/可变参数?

    我的项目之一是抛出 lambda 表达式 https github com fge throwing lambdas 我的目标是简化潜在的使用 FunctionalInterfaces in Streams 其在流中使用的唯一 缺陷 是它们
  • 如何检查向量是否是单个 NA 值,没有长度警告且没有抑制

    我有一个功能NA作为默认值 但如果没有NA应该是一个不限于大小 1 的字符向量 我有一个检查来验证这些 但是is na当向量是字符向量时产生标准警告length大于1 so function lt function x NA if is n