gpt4 book ai didi

r - match() 与 %in% 运算符

转载 作者:行者123 更新时间:2023-12-04 10:15:38 27 4
gpt4 key购买 nike

从我在 ?match() 中读到的内容

"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0



为什么使用 match(x, dict[["word"]], 0L) 会得到不同的结果
vapply(strsplit(df$text, " "), 
function(x) sum(dict[["score"]][match(x, dict[["word"]], 0L)]), 1)
#[1] 2 -2 3 -2

对比使用 dict[["word"]] %in% x
vapply(strsplit(df$text, " "), 
function(x) sum(dict[["score"]][dict[["word"]] %in% x]), 1)
#[1] 2 -2 1 -1

数据
library(dplyr)
df <- data_frame(text = c("I love pandas", "I hate monkeys",
"pandas pandas pandas", "monkeys monkeys"))
dict <- data_frame(word = c("love", "hate", "pandas", "monkeys"),
score = c(1,-1,1,-1))

更新

经过理查德的解释,我现在明白了我最初的误解。 %in%运算符返回一个逻辑向量:
> sapply(strsplit(df$text, " "), function(x) dict[["word"]] %in% x)
[,1] [,2] [,3] [,4]
[1,] TRUE FALSE FALSE FALSE
[2,] FALSE TRUE FALSE FALSE
[3,] TRUE FALSE TRUE FALSE
[4,] FALSE TRUE FALSE TRUE

match()返回位置编号:
> sapply(strsplit(df$text, " "), function(x) match(x, dict[["word"]], 0L))
[[1]]
[1] 0 1 3

[[2]]
[1] 0 2 4

[[3]]
[1] 3 3 3

[[4]]
[1] 4 4

最佳答案

match()返回第一个匹配位置的整数向量,如果该位置不是第一个,则该向量将大于 1。
%in%返回一个逻辑向量,其中匹配 (TRUE) 为 总是 1(当表示为整数时)。

因此,您计算中的总和可能会有所不同。

关于r - match() 与 %in% 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28104118/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com