【问题标题】:Subsetting a vector using a list of sequences in R [closed]使用R中的序列列表对向量进行子集[关闭]
【发布时间】:2019-11-16 08:24:38
【问题描述】:

我有一个包含文本数据的字符向量,我可以通过选择单独的行来对其进行子集化。最终目标是将向量的不同序列存储为自变量或列表元素。我可以使用一个简单的循环来做到这一点,但是我没有成功地通过序列列表对字符向量进行子集化。

看下面的例子:

Text<-scan("~/Desktop/Lorem Ipsum.txt", what="character", sep="\n")

 [1] "Lorem ipsum dolor sit amet, "                                                                          
 [2] "consectetur adipiscing elit,"                                                                          
 [3] "sed do eiusmod tempor incididunt "                                                                     
 [4] "ut labore et dolore magna aliqua."                                                                     
 [5] "Ut enim ad minim veniam, "                                                                             
 [6] "quis nostrud exercitation "                                                                            
 [7] "ullamco laboris nisi ut aliquip ex ea commodo consequat."                                              
 [8] "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."
 [9] "Excepteur sint occaecat cupidatat non proident,"                                                       
[10] "sunt in culpa qui officia deserunt mollit anim id est laborum."

对向量进行子集化的正常方式是text[1:4],返回

[1] "Lorem ipsum dolor sit amet, "      
[2] "consectetur adipiscing elit,"    
[3] "sed do eiusmod tempor incididunt "
[4] "ut labore et dolore magna aliqua."

在一个列表中,我存储了代表向量中不同组线的数字序列。

Sentence.numbers&lt;-c(1:4, 5:7, 8, 9:10).

现在我想一次将构成不同句子的所有数字子集化,并将它们存储在一个列表中以供进一步分析。

我用了Text[Sentence.numbers],但是报错信息是“invalid index type 'list'”。

有没有办法使用值列表进行子集化?

【问题讨论】:

  • 该错误意味着Sentence.numbers 是一个列表而不是一个向量。您是否使用list 而不是c?您可以使用unlist 进行转换。

标签: r list vector subset sequence


【解决方案1】:

您需要将Sentence.numbers设置为列表,然后使用lapply -

Sentence.numbers <- list(1:4, 5:7, 8, 9:10)

lapply(Sentence.numbers, function(x) Text[x])

这是一个例子-

lapply(Sentence.numbers, function(x) letters[x])

[[1]]
[1] "a" "b" "c" "d"

[[2]]
[1] "e" "f" "g"

[[3]]
[1] "h"

[[4]]
[1] "i" "j"

【讨论】:

  • 或者,你知道,只是一开始就不要把它列在列表中,或者unlisting it...
  • “我想一次将构成不同句子的所有数字子集化,并将它们存储在一个列表中以供进一步分析” - 我的理解是Sentence.numbers已经是一个列表,OP 在帖子中使用 c 犯了一个错误。无论如何,该列表中的每个元素都结合了来自 Text 的不同句子,这就是 OP 想要的。在 OP 澄清之前,使用 lapply 对我来说似乎是正确的。
  • 感谢您的回复。我处理了原始数据,以便我可以简单地使用 lapply-command。现在都解决了。
猜你喜欢
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 2020-04-27
  • 1970-01-01
  • 2018-06-16
  • 2020-09-09
相关资源
最近更新 更多