如何在两个非数字值之间使用OR?

53 浏览
0 Comments

如何在两个非数字值之间使用OR?

这是我的代码:

m.v <- c("A", "AGG", "A" ,"G", "GA")
count <- 0
for(i in 1:5){
  if(m.v[i] == "A" | m.v[i] == "G"){
    count <- count + 1
  }
}

我收到了错误提示,我知道 `if(m.v[i] == "A" | "G")` 不正确,因为 "A" 和 "G" 不是数值型的值,但是我该如何解决这个错误?

0
0 Comments

在R中,当我们想要在两个非数字值之间使用OR运算符时,可以使用以下方法。

问题的原因是我们想要检查一个向量m.v中的值是否与另一个向量c("A","G")中的任何一个匹配,并返回匹配的次数。我们可以使用%in%运算符来实现这一点,它会返回一个逻辑向量,指示m.v中的每个值是否与c("A","G")中的任何一个匹配。

为了计算匹配的次数,我们可以使用sum函数对逻辑向量进行求和。R中的sum函数在对逻辑值进行求和时,会将它们隐式转换为整数值。因此,我们可以直接对逻辑向量应用sum函数,得到我们想要的匹配次数。

以下是使用上述方法解决问题的示例代码:

sum(m.v %in% c("A","G"))

上述代码会返回匹配次数,输出结果为3。

在这个例子中,我们没有使用for循环来逐个检查每个值是否匹配,而是利用R的向量化计算功能。向量化计算可以提高代码的可读性和性能,尤其对于较大的数据集来说。

需要注意的是,并非所有的操作都可以作为整体向量来进行计算,但是当可以使用向量化计算时,可以在代码的可读性和性能方面获得好处。

0
0 Comments

使用OR操作符(|)来比较两个非数值类型的值会导致错误。在上述代码中,当使用OR操作符来比较m.v[i]和"c("A", "G")"时,会出现错误。为了解决这个问题,可以使用%in%操作符来替代OR操作符。

%in%操作符用于检查一个向量中的元素是否在另一个向量中。在上述代码中,使用%in%操作符来检查m.v[i]是否在"c("A", "G")"中。如果m.v[i]在"c("A", "G")"中,则count加1。

以下是使用%in%操作符来解决上述问题的代码:

m.v <- c("A", "AGG", "A" ,"G", "GA")
count <- 0
for(i in 1: 5){
  if(m.v[i] %in% c("A", "G")){
    count <- count+1
  }
}
count
[1] 3

这样,我们就可以正确地比较两个非数值类型的值了。

0