如何加速R代码
How to speed up R code
下面的代码可以很好地删除 myCharVector 中的停用词。但是当 myCharVector 有大量的句子时,它需要很长时间才能完成。如何加速循环操作(使用apply)?
谢谢。
library(tm)
myCharVector <- c("This is the first sentence", "hello this is second", "and now is the third one")
for(i in 1:length(myCharVector))
{
for(j in 1:length(stopwords("en")))
{
tmp1 <- paste(stopwords("en")[j], " ", sep = "")
tmp1 <- paste(" ", tmp1, sep = "")
myCharVector[i] <- gsub(tmp1, " ", myCharVector[i])
}
}
你可以试试mgsub
library(qdap)
mgsub(sprintf(' %s ', stopwords('en')), ' ', myCharVector)
#[1] "This first sentence" "hello second" "and now third one"
在这种情况下似乎有一个domain-specific solution。
不过,总的来说,要努力更多地利用 R 的矢量化运算。例如,不用 paste
单独输入每个单词,您可以这样做:
stopwords = paste0(' ', stopwords('en'), ' ')
这依次用空格包围每个停用词。同理,不用循环myCharVector
,直接用gsub
即可。
最重要的是,不要遍历索引。这是间接的、缓慢的并且(几乎?)总是不必要的。而是直接循环条目:
for (word in paste0(' ', stopwords('en'), ' '))
myCharVector = gsub(word, ' ', myCharVector)
这同时比您的解决方案更短、更清晰、更高效。
(也就是说,这无论如何都会产生错误的结果,你真的应该使用预定义的函数。)
下面的代码可以很好地删除 myCharVector 中的停用词。但是当 myCharVector 有大量的句子时,它需要很长时间才能完成。如何加速循环操作(使用apply)?
谢谢。
library(tm)
myCharVector <- c("This is the first sentence", "hello this is second", "and now is the third one")
for(i in 1:length(myCharVector))
{
for(j in 1:length(stopwords("en")))
{
tmp1 <- paste(stopwords("en")[j], " ", sep = "")
tmp1 <- paste(" ", tmp1, sep = "")
myCharVector[i] <- gsub(tmp1, " ", myCharVector[i])
}
}
你可以试试mgsub
library(qdap)
mgsub(sprintf(' %s ', stopwords('en')), ' ', myCharVector)
#[1] "This first sentence" "hello second" "and now third one"
在这种情况下似乎有一个domain-specific solution。
不过,总的来说,要努力更多地利用 R 的矢量化运算。例如,不用 paste
单独输入每个单词,您可以这样做:
stopwords = paste0(' ', stopwords('en'), ' ')
这依次用空格包围每个停用词。同理,不用循环myCharVector
,直接用gsub
即可。
最重要的是,不要遍历索引。这是间接的、缓慢的并且(几乎?)总是不必要的。而是直接循环条目:
for (word in paste0(' ', stopwords('en'), ' '))
myCharVector = gsub(word, ' ', myCharVector)
这同时比您的解决方案更短、更清晰、更高效。
(也就是说,这无论如何都会产生错误的结果,你真的应该使用预定义的函数。)