在 R 中的 for 循环中分配对象
Assigning an object in a for loop in R
我在 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"
我做错了什么?
corpus.n1
似乎已经是命名列表了。如果你想对所有元素应用相同的函数,你根本不需要循环——一个简单的 lapply
就可以完成这项工作:
tdm.n2 <- lapply(corpus.n1, TermDocumentMatrix, control = list(...))
请注意,每次调用都会将 control
参数传递给 TermDocumentMatrix
函数。有关详细信息,请参阅 ?lapply
和 ?mapply
。
我在 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"
我做错了什么?
corpus.n1
似乎已经是命名列表了。如果你想对所有元素应用相同的函数,你根本不需要循环——一个简单的 lapply
就可以完成这项工作:
tdm.n2 <- lapply(corpus.n1, TermDocumentMatrix, control = list(...))
请注意,每次调用都会将 control
参数传递给 TermDocumentMatrix
函数。有关详细信息,请参阅 ?lapply
和 ?mapply
。