为什么这个例子的工作:
which(letters %in% c('j', 'e', 'f', 'f', 'r', 'e', 'y'))
然而;这一个不?
name <- c(strsplit("jeffrey", ""))
which(letters %in% name)
这难道不是同样的事情,因为在这两种情况下在该函数的第二个参数是一个Vector?
问题是,strsplit
仍然list
1与第一个元素length
一个vector
strsplit("jeffrey", "")
#[[1]]
#[1] "j" "e" "f" "f" "r" "e" "y"
包装与c
是不会改变的情况下通过默认recursive = FALSE
。
c(strsplit("jeffrey", ""))
#[[1]]
#[1] "j" "e" "f" "f" "r" "e" "y"
更改recursive = TRUE
将有可能给list
转换为vector
c(strsplit("jeffrey", ""), recursive = TRUE)
#[1] "j" "e" "f" "f" "r" "e" "y"
如果我们用unlist
(如@ JohnyCrunch的解决方案),这是因为在默认情况下list
unlists的recursive = TRUE
并转换为vector
。在我们的情况下,另一个方法是将提取与list
的[[
元件(因为它是唯一list
1的length
。
name <- strsplit("jeffrey", "")[[1]]
which(letters %in% name)
#[1] 5 6 10 18 25
如果您运行class(name)
你会注意到,这是一个列表。使用unlist()
to解决的问题:
name <- unlist(strsplit("jeffrey", ""))
which(letters %in% name)
最好!