与向量,有时作品 - R的

时间:2019-02-02 18:42:51

标签: r

为什么本实施例中工作:

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

但是;这不是吗?

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

这不是一回事吗,因为在这两种情况下,哪个函数中的第二个参数都是向量?

2 个答案:

答案 0 :(得分: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将使得有可能转换的listvector

c(strsplit("jeffrey", ""), recursive = TRUE)
#[1] "j" "e" "f" "f" "r" "e" "y"

如果我们使用unlist(如@JohnyCrunch的解决方案一样),它将取消列出list,因为默认情况下recursive = TRUE会转换为vector。在我们的情况下,另一种方法是使用list提取[[元素(因为它只是list 1中的length

name <- strsplit("jeffrey", "")[[1]]
which(letters %in% name)
#[1]  5  6 10 18 25

答案 1 :(得分:3)

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

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

最好!