与向量,有时作品 - R的

问题描述 投票:2回答:2

为什么这个例子的工作:

which(letters %in% c('j', 'e', 'f', 'f', 'r', 'e', 'y'))

然而;这一个不?

name <- c(strsplit("jeffrey", ""))
which(letters %in% name)

这难道不是同样的事情,因为在这两种情况下在该函数的第二个参数是一个Vector?

r
2个回答
4
投票

问题是,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

3
投票

如果您运行class(name)你会注意到,这是一个列表。使用unlist()to解决的问题:

name <- unlist(strsplit("jeffrey", ""))
which(letters %in% name)

最好!

© www.soinside.com 2019 - 2024. All rights reserved.