Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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 不一致行为_R - Fatal编程技术网

R 不一致行为

R 不一致行为,r,R,考虑以下几点: seq(from=10,to=30)[c(4,8)] [1] 13 17 seq(from=10,to=30)[c(NA,8)] [1] NA 17 seq(from=10,to=30)[c(NA,NA)] [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 对我来说,后者的结果与R处理其他两个示例的方式不一致,并且花费了我相当不愉快的调试痛苦 这可能被认为是一个bug吗?不确定它是否是bug

考虑以下几点:

seq(from=10,to=30)[c(4,8)]
[1] 13 17

seq(from=10,to=30)[c(NA,8)]
[1] NA 17

seq(from=10,to=30)[c(NA,NA)]
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
对我来说,后者的结果与R处理其他两个示例的方式不一致,并且花费了我相当不愉快的调试痛苦


这可能被认为是一个bug吗?

不确定它是否是bug-我怀疑这取决于您的观点,但这是索引工作原理的一个微妙之处。快速解决方案是将第三个示例更改为:

seq(from=10,to=30)[as.numeric(c(NA,NA))]
原因是
c(NA,NA)
是一个逻辑向量,因此使用逻辑子集(包括循环向量),而至少有一个非NA会导致向量提升为整数向量。同样,这可以通过以下方式实现:

seq(from=10,to=30)[c(NA_integer_,NA_integer_)]

如果您不熟悉索引,请参见
?”['
,了解索引的详细信息。

一个错误,没有。
seq(10,30)
没有一个是
NA
[
是一个提取函数。您试图提取的
NA
在序列中不存在。请尝试
seq(from=10,to=30)[c(TRUE,FALSE)]
看看你得到了什么。或者试着
(10:30)[NA]
看看你得到了什么。
R
关于处理
NA
的规则非常明确,事实上是一致的。我不明白。
(10:30)[c(NA,8)]
可能会被解释为:“返回‘不适用’和第8个元素”,那么为什么呢“两次返回‘不适用’元素”不返回
c(NA,NA)
?这非常清楚-我没有意识到子集向量的类型差异,并且一直认为
NA
是一种中性类型。非常感谢。