R:which()函数是如何工作的

R:which()函数是如何工作的,r,R,我不知道是哪个函数。基本上,我认为它检查输入对象(例如向量)的哪个位置的逻辑条件为真。如文件所示: which(LETTERS == "R") [1] 18 换句话说,它遍历所有字母value并检查value==R。但这似乎是一个误解。如果我输入 a <- c("test","test2","test3","test4") b <- c("test","test3") which(a==b) [1] 1 我的问题有两个: 如何返回与字符向量b匹配的字符向量a的位置 which()

我不知道是哪个函数。基本上,我认为它检查输入对象(例如向量)的哪个位置的逻辑条件为真。如文件所示:

which(LETTERS == "R")
[1] 18
换句话说,它遍历所有字母value并检查value==R。但这似乎是一个误解。如果我输入

a <- c("test","test2","test3","test4")
b <- c("test","test3")
which(a==b)
[1] 1
我的问题有两个:

  • 如何返回与字符向量b匹配的字符向量a的位置

  • which()是如何操作的,因为我显然误解了函数

  • 谢谢你的回答


    编辑:谢谢你的快速回复,你澄清了我的误解

    =
    将值1与1进行比较
    (a[1]==b[1]);(a[2]==b[2])…..
    而非集合

    对于设置操作,请使用%

    使用
    a[which(在%b中为%a)]
    获取
    [1]“test”和“test3”

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

    哪个(在%b中的%a)
    将返回

    [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进行比较
    (a[1]==b[1]);(a[2]==b[2])…..
    而非集合

    对于设置操作,请使用%

    使用
    a[which(在%b中为%a)]
    获取
    [1]“test”和“test3”

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

    哪个(在%b中的%a)
    将返回

    [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的情况下,您会收到一条警告消息,说明短向量不能乘以整数来获得长向量长度。

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

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

    which
    基本上确定了逻辑向量中哪些元素是
    TRUE

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

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

    它本质上标识了逻辑向量中哪些元素是
    真的。

    匹配(a,b)
    …谢谢!文档中说“匹配:一个整数向量,如果存在匹配,则给出表中第一个匹配的位置,否则为nomatch。”如果a在b中多次出现,它是返回每个索引/位置还是只返回第一个?顺便问一下-
    匹配(a,b)
    与%b中的
    a%相同
    请参见
    !文档中说“匹配:一个整数向量,如果存在匹配,则给出表中第一个匹配的位置,否则为nomatch。”如果a在b中多次出现,它是返回每个索引/位置还是只返回第一个?顺便问一下-
    匹配(a,b)
    与%b中的
    a%相同
    请参见
    ?base::match
    x%in%y
    match(x,y,nomatch=0L)>0L相同
    回答得好,谢谢!回答得很好,谢谢!