如何压扁列表列表?

时间:2013-04-30 12:49:17

标签: r list tm

tm包扩展c,以便在给定一组PlainTextDocument时自动创建Corpus。不幸的是,似乎必须单独指定每个PlainTextDocument

e.g。如果我有:

foolist <- list(a, b, c); # where a,b,c are PlainTextDocument objects

我这样做是为了获得Corpus

foocorpus <- c(foolist[[1]], foolist[[2]], foolist[[3]]);

我有一个'PlainTextDocument的列表,如下所示:

> str(sectioned)
List of 154
 $ :List of 6
  ..$ :Classes 'PlainTextDocument', 'TextDocument', 'character'  atomic [1:1] Developing assessment models   Developing models
  .. .. ..- attr(*, "Author")= chr "John Smith"
  .. .. ..- attr(*, "DateTimeStamp")= POSIXlt[1:1], format: "2013-04-30 12:03:49"
  .. .. ..- attr(*, "Description")= chr(0) 
  .. .. ..- attr(*, "Heading")= chr "Research Focus"
  .. .. ..- attr(*, "ID")= chr(0) 
  .. .. ..- attr(*, "Language")= chr(0) 
  .. .. ..- attr(*, "LocalMetaData")=List of 4
  .. .. .. ..$ foo           : chr "bar"
  .. .. .. ..$ classification: chr "Technician"
  .. .. .. ..$ team          : chr ""
  .. .. .. ..$ supervisor    : chr "Bill Jones"
  .. .. ..- attr(*, "Origin")= chr "Smith-John_e.txt"

#etc., all sublists have 6 elements

因此,要将我的所有PlainTextDocument转换为Corpus,这样就可以了:

sectioned.Corpus <- c(sectioned[[1]][[1]], sectioned[[1]][[2]], ..., sectioned[[154]][[6]])

有人能建议一种更简单的方法吗?

ETA:foo<-unlist(foolist, recursive=FALSE)生成一个PlainTextDocuments的平面列表,这仍然让我有一个问题,即按元素将列表元素提供给c

3 个答案:

答案 0 :(得分:59)

我希望unlist(foolist)会对您有所帮助。它有一个recursive选项,默认为TRUE

因此unlist(foolist, recursive = FALSE)将返回文档列表,然后您可以通过以下方式将它们组合在一起:

do.call(c, unlist(foolist, recursive=FALSE))

do.call只将函数c应用于获取列表的元素

答案 1 :(得分:18)

这是一个更通用的解决方案,用于何时多次嵌套列表,并且列表元素之间的嵌套量不同:

Monitors.newObjectMonitor(id, object)

答案 2 :(得分:1)

这是另一种适用于我的列表列表的方法。

df <- as.data.frame(do.call(rbind, lapply(foolist, as.data.frame)))