vector1 = c(1,2,3,NA)
condition1 = (vector1 == 2)
vector1[condition1]
vector1[condition1==TRUE]
在上面的代码中,condition1为“FALSE TRUE FALSE NA”, 并且第3和第4行都给我结果“2 NA” 这不是我的预期。
我想要的值为'2'的元素,不包括NA。
有人可以解释为什么R设计为以这种方式工作吗? 以及如何通过简单的命令获得我想要的结果?
答案 0 :(得分:1)
子集 mFabButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (setFabButtonStarColor() == R.color.colorWhiteFavoriteStar) {
mFabButton.setColorFilter(ContextCompat.getColor(DetailActivity.this, R.color.colorYellowFavoriteStar));
mFabButton.setContentDescription(getString(R.string.unsave_floatbutton));
try {
saveMovie();
} catch (IllegalArgumentException e) {
Log.e(TAG, e.getMessage());
}
} else {
mFabButton.setColorFilter(ContextCompat.getColor(DetailActivity.this, R.color.colorWhiteFavoriteStar));
mFabButton.setContentDescription(getString(R.string.save_floatbutton));
}
}
});
始终为vector[NA]
,因为NA
值未知,因此子集的结果也是未知的。 NA
会为%in%
返回FALSE
,因此在此处有用。
NA
答案 1 :(得分:1)
如果您在RStudio并输入
?`[`
您将得到以下解释:
索引中的NAs
提取时,数字,逻辑或字符NA索引选择 未知元素,因此在a的相应元素中返回NA 逻辑,整数,数字,复数或字符结果,以及a的NULL 名单。 (对于原始结果,它返回00。)
替换时(即在赋值的lhs上使用索引)NA 不选择任何要替换的元素。因为有歧义 是否应该使用rhs的元素,这只是 如果rhs值是长度为1则允许(所以两个解释 会有相同的结果)。 (S的记录行为就是这样 一个NA替代指数'无处可去',但耗尽了一个元素 价值:Becker等人。 359.但是,其他情况并非如此 的实施方式。)
答案 2 :(得分:0)
在这种情况下尝试逻辑运算符,
vector1 = c(1,2,3,NA)
condition1<-(vector1==2 & !is.na(vector1) )
condition1
# FALSE TRUE FALSE FALSE
vector1[condition1]
# 2
&安培;当两个逻辑运算符都为True时,operation返回true。
答案 3 :(得分:0)
identical
是&#34;测试两个对象完全相等的安全可靠的方法。在这种情况下它返回TRUE,在其他每种情况下都返回FALSE。&#34; (见?相同)
由于它不比较元素比较,你可以在sapply中使用它来将vector1中的每个元素与2进行比较。即:
condition1 = sapply(vector1, identical, y = 2)
将给出:
vector1[condition1]
[1] 2