在 R:How 中,我是否在循环中遍历字符串?

In R:How do I itearate through character strings in a loop?

我正在尝试从 for 循环中的向量访问字符串。

我有这样一个语料库:

library(tm)
corpus = Corpus(VectorSource(c("cfilm,cgame,ccd","cd,film,cfilm")))

我的目标是摆脱所有不必要的 "c" 字符。请注意,这意味着我不想从 cd 中删除 c,但要删除 ccd、cgame 等等。

我使用这个函数,它接受一个语料库并删除一个术语和第二个术语。

toString = content_transformer(function(x,from,to)gsub(from, to, x))

因此,例如,要将 cgame 替换为 game,我使用

corpus = tm_map(corpus,toString,"cgame","game")

现在,我不想为所有术语重复这一行,而是想使用一个循环,使用具有相关术语的向量迭代所有可能的替换。

replace = c("game","film","cd")

我尝试了两种方法,但其中 none 行得通:

for(i in replace){tm_map(corpus,toString,paste("c",get(i),sep=""),get(i))}

for(i in 1:length(replace)){tm_map(corpus,toString,paste("c",replace[i],sep=""),replace[i])}

在第一种情况下,R 告诉我它找不到 get(i) 接收到的对象:Error in get(i) : object 'game' not found。 第二种,没有报错信息,但语料库内没有任何变化。

如何将向量中的项目查询为字符串,以便 for 循环对所有项重复,我对 corpus = tm_map(corpus,toString,"cgame","game)

所做的

tm_map 函数不会就地修改语料库,它 returns 是修改后的语料库。现在您没有做任何事情来保存结果。尝试

 for(i in 1:length(replace)){
     corpus <- tm_map(corpus,toString,paste("c",replace[i],sep=""),replace[i])
  }

此外,toString 实际上是 base R 中函数的名称,因此编写自己的同名函数并不是一个好主意。

最后,get() 方法 returns 与您传递给它的字符值同名的 R 变量的值。没有理由在这里使用 get(),因为您想继续使用字符串而不是变量名。