为什么本实施例中工作:
which(letters %in% c('j', 'e', 'f', 'f', 'r', 'e', 'y'))
但是;这不是吗?
name <- c(strsplit("jeffrey", ""))
which(letters %in% name)
这不是一回事吗,因为在这两种情况下,哪个函数中的第二个参数都是向量?
答案 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
将使得有可能转换的list
到vector
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)
最好!