我在R中使用tm并希望稍微更改一下stemCompletion函数。 目前我有一个字符串
x <- c('everi','new')
和模式
dictionary <- c ('every','everyone','new')
当我在stemCompletion中运行代码中的构建时,正在运行的函数是以下
possibleCompletions <- lapply(x, function(w) grep(sprintf("^%s", w),
dictionary,
value = TRUE))
structure(sapply(possibleCompletions, "[", 1), names = x)
,结果是
everi new
NA "new"
我想更改函数,以便如果grep没有为x的特定值找到任何内容 然后它尝试取出字符串的最后一个值。在我的情况下,永远&#39;而不是&#39; everi&#39; 我尝试了这段代码,但它不起作用。
substrLeft <- function(x, n) { substr(x, 1, nchar(x)-n) }
possibleCompletions <- lapply(x, function(w)
if (grepl(sprintf("^%s", w),dictionary,fixed = FALSE) = FALSE) {
grep(sprintf("^%s", substrLeft(w,1)),dictionary,value = TRUE,fixed = FALSE)
} else {
grep(sprintf("^%s", w),dictionary,value = TRUE,fixed = FALSE, invert = TRUE)
})
structure(sapply(possibleCompletions, "[", 1), names = x)
谢谢大家。
答案 0 :(得分:0)
基本上你有一些语法问题。
=
是作业,==
进行比较。 if
条件是according to the manual“单个逻辑值”。所以你可以通过在括号((grepl(sprintf("^%s", w),dictionary,fixed = FALSE) == FALSE)
)中包装比较来解决这个问题,但是你会收到警告,因为grepl
会产生一个长度为2的列表。{}
中:possibleCompletions <- lapply(x, function (w) {
+ if ((grepl(sprintf("^%s", w),dictionary,fixed = FALSE) == FALSE) ) {
+ grep(sprintf("^%s", substrLeft(w,1)),dictionary,value = TRUE,fixed = FALSE)
+ } else {
+ grep(sprintf("^%s", w),dictionary,value = TRUE,fixed = FALSE, invert = TRUE)
+ }
+ })
Warning messages:
1: In if ((grepl(sprintf("^%s", w), dictionary, fixed = FALSE) == FALSE)) { :
the condition has length > 1 and only the first element will be used
2: In if ((grepl(sprintf("^%s", w), dictionary, fixed = FALSE) == FALSE)) { :
the condition has length > 1 and only the first element will be used
> str(possibleCompletions)
List of 2
$ : chr [1:2] "every" "everyone"
$ : chr "new"