r - 使用布尔值列表在 R 中建立索引的问题
问题描述
我有几年的编程经验,但对 R 比较陌生。尝试使用布尔条目数组从数组中提取条目时遇到了意想不到的结果:
array = c(2, 3, 4, 5);
array[c(FALSE, FALSE, FALSE, TRUE)]
#output: [1] 5
array[c(0, 0, 0, 1)]
#output: [1] 2
这让我感到惊讶,因为我认为 FALSE 和 0 在这种过程中是可以互换的(对于 TRUE 和 1 也是如此)。我检查了以下内容以确保,变得更加困惑:
T==1
#output: [1] TRUE
F==0
#output: [1] TRUE
c(0,0,0,1)==c(F,F,F,T)
#output: [1] TRUE TRUE TRUE TRUE
有人可以帮助解释为什么 R 以不同的方式处理这些索引方法吗?
非常感谢,
解决方案
as.logical(c(0,0,0,1))==c(F,F,F,T)
解释
在R
中,numeric
值的处理方式与logical
值不同。
在您的场景中,由于2
是数组的第一个元素,因此为第二个子集操作返回它(并且没有第 0 个元素)。
PS仅对于少数操作(例如==
),逻辑值首先被强制转换为数字。感谢@IceCreamTouchan 在上面的评论中添加这个。
推荐阅读
- angular - 尝试使用不同的组件删除列表条目
- javascript - 是否可以让 JavaScript 对象评估为原语
- adfs - 使用 Django 登录 AD FS 失败,错误代码为 364
- javascript - React - 处理作为道具传递的空值
- php - Composer:需要满足依赖关系的问题
- kubernetes - NetworkPolicy 的自定义规则
- ubuntu - (双启动)Windows 启动和更新后 Ubuntu 18.04 没有声音
- python - 在 pathlib.Path 上模拟 open() 以返回带有 unittest.mock 的模拟文件句柄
- angular - Angular - 为什么我的变量在订阅 API 后是“未定义的”?
- list - 等待后 Scala 期货返回空列表