【问题标题】:Assigning an object in a for loop in R在R中的for循环中分配对象
【发布时间】:2015-04-16 00:16:34
【问题描述】:

我有一堆语料库加载到 R 环境中,我想将每个语料库转换为术语文档矩阵。我尝试了for 循环和assign 命令的组合,但它不起作用,我不知道出了什么问题。

我将环境中的语料库名称存储在一个列表中:

bNames<-ls()

并制作一个命名的对象列表

corpus.n1<-mget(bNames)
> corpus.n1
$qB001
<<VCorpus (documents: 1, metadata (corpus/indexed): 0/0)>>

$qB002
<<VCorpus (documents: 1, metadata (corpus/indexed): 0/0)>>
....

库和 n-gram 函数

library(rJava) 
.jinit(parameters="-Xmx128g")
library(RWeka)
nGra2Tok <- function(x) NGramTokenizer(x, Weka_control(min = 2, max =2))

我想放入循环的那种东西:

tdm.n2.01<-TermDocumentMatrix(qB001,control=list(tokenize=nGram2Tok))
tdm.n2.02<-TermDocumentMatrix(qB002,control=list(tokenize=nGram2Tok))
tdm.n2.03<-TermDocumentMatrix(qB003,control=list(tokenize=nGram2Tok))
....

TermDocumentMatrix 循环

for(i in corpus.n1){
  tdm.n2<-paste(i)
  assign(i, TermDocumentMatrix(tdm.n2,control=list(tokenize=nGram2Tok)))
}

我得到的错误:

Error in UseMethod("TermDocumentMatrix", x) : 
  no applicable method for 'TermDocumentMatrix' applied to an object of class "character"

我做错了什么?

【问题讨论】:

    标签: r for-loop assign


    【解决方案1】:

    看来corpus.n1 已经是一个命名列表了。如果您想对所有元素应用相同的功能,则根本不需要循环——一个简单的lapply 就可以完成这项工作:

    tdm.n2 <- lapply(corpus.n1, TermDocumentMatrix, control = list(...))
    

    请注意,每次调用时,control 参数都会传递给 TermDocumentMatrix 函数。请参阅?lapply?mapply 了解更多详情。

    【讨论】:

      猜你喜欢
      • 2016-11-24
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 2021-02-06
      相关资源
      最近更新 更多