【问题标题】:Why does strsplit return a list为什么strsplit返回一个列表
【发布时间】:2014-11-28 21:08:42
【问题描述】:

考虑

text <- "who let the dogs out"
fooo <- strsplit(text, " ")
fooo
[[1]]
[1] "who"  "let"  "the"  "dogs" "out" 

strsplit 的输出是一个列表。列表的第一个元素是一个向量,包含上面的单词。

为什么函数会这样?在任何情况下它会返回一个包含多个元素的列表?

我可以使用

fooo[[1]][1]
[1] "who"

,但是没有更简单的方法吗?

【问题讨论】:

  • 因为它是这样写的
  • 这是任何宗教原教旨主义者都会引以为豪的答案:“因为他做到了”。
  • 如果text 中有两个元素,strsplit 返回一个向量,你将如何区分哪些拆分来自text 中的哪个元素?
  • 以您的示例为例,unlist(fooo)[1]fooo[[1]][1] 的替代品

标签: regex r parsing strsplit


【解决方案1】:

对于你的第一个问题,我想到的一个原因是它可以在同一个对象中保留不同长度的结果向量,因为它是在 x 上向量化的:

text <- "who let the dogs out"
vtext <- c(text, "who let the")
##
> strsplit(text, " ")
[[1]]
[1] "who"  "let"  "the"  "dogs" "out" 

> strsplit(vtext, " ")
[[1]]
[1] "who"  "let"  "the"  "dogs" "out" 

[[2]]
[1] "who" "let" "the"

如果它以data.framematrix 等形式返回,而不是list,则必须用其他元素填充。

【讨论】:

  • 对,我想到了y 中的向量,而不是x 中的向量。伟大的。但我很想把你的 vtext 改成 `...c(text, 'who who who')
  • 此外,其他包中的一些函数(例如 stringrstringi)能够返回 list 以外的其他内容,例如字符矩阵(前提是生成的向量是相同的长度,大概)。我还没有机会花太多时间使用stringi,但它似乎有几个可能对您有用的字符串拆分功能(查看see also section here
  • stringi::stri_list2matrix 太棒了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 2020-11-10
相关资源
最近更新 更多