R:what()函数如何运作

时间:2018-06-20 12:30:12

标签: r which

我对哪个功能感到困惑。基本上,我认为它可以检查输入对象(例如向量)在哪个位置上的逻辑条件为真。如文档所示:

which(LETTERS == "R")
[1] 18

换句话说,它遍历所有LETTERS值并检查value ==R。但这似乎是一种误解。如果我输入

a <- c("test","test2","test3","test4")
b <- c("test","test3")
which(a==b)
[1] 1

它返回[1] 1,尽管test3确实也出现在两个向量中。另外,如果我为a输入一个较短的向量,则会返回警告:

a <- c("test","test2","test3")
b <- c("test","test3")
which(a==b)
[1] 1

Warning message:
In a == b : longer object length is not a multiple of shorter object length

我的问题是双重的:

  1. 如何返回与字符向量b相匹配的字符向量a的位置?

  2. what()如何运行,因为我显然误解了该函数。

谢谢您的回答

编辑:感谢您的快速答复,您澄清了我的误会!

2 个答案:

答案 0 :(得分:3)

==比较值1与1 (a[1]==b[1]);(a[2]==b[2]).....而不是集合。

对于设置操作,请使用%in%

使用a[which(a %in% b)]获取[1] "test" "test3"

which()返回TRUE表达式的索引(!),而不是值。

which(a %in% b)将返回

[1] 1    3

发出奇怪警告消息的原因是R的回收

Warning message:
In a == b : longer object length is not a multiple of shorter object length

因此,当您将长度为4的向量与长度为2的向量进行比较时,每个值(使用==)的值R都会回收短向量。在4和2中可以正常工作,您将得到以下问题的答案:(a1 == b1,a2 == b2,a3 == b1,a4 == b2)。对于长度为4和3的情况-您会收到一条警告消息,指出不能将短向量乘以整数以获得长向量长度。

答案 1 :(得分:1)

您需要给which提供一个输入,告诉它b中a的哪些元素:

which(a%in%b)
[1] 1 3

which本质上标识了逻辑向量中的元素TRUE