我创建了一个非常基本的for循环和if语句条件函数,但每次我将变量“words”中的每个第二个元素与向量输入“t”匹配时,我想完全删除该匹配元素。
matching <- function (t, words){
for (i in 1:length(t)) {
if (t[i] == words[2]){
t[i] <- NULL
}
}
t
}
但如果我输入像t <- c("Where", "is", "the", "money", "here")
这样的内容
并且使用匹配(t,c(“是”,“the”))调用该函数,函数会中断。
“t [i]中的错误&lt; - NULL:替换长度为零”
我该如何解决这个问题?我想用
[1] "Where" "is" "money" "here"
基本上我想让它适用于我放入此功能的任何输入.. 此外,我想找到一些方法,而不使用像remove()或类似的任何特殊函数..
编辑:没有grep,paste,gsub,删除等......没有特殊的R功能
答案 0 :(得分:0)
假设您要从word
中仅删除t
的第2个元素,我们可以尝试使用grep
及其invert
和value
属性
grep(word[2], t, invert = TRUE, value = TRUE)
#[1] "Where" "is" "money" "here"
其中
t <- c("Where", "is", "the", "money", "here")
word <- c("is", "the")
此处word
是您要从t
中删除的字词。 invert
的{{1}}属性返回不匹配的值。
编辑:根据OP的评论,不应使用“特殊”功能。这是继续grep
循环
for
示例输出:
matching <- function (t, words){
flag = FALSE
for (i in 1:length(t)) {
if (t[i] == words[2]){
t[i] <- t[i+1]
flag = TRUE
}
if(flag) {
t[i] <- t[i+1]
}
}
t[-length(t)]
}
答案 1 :(得分:0)
这样可以解决问题:
t <- c("Where", "is", "the", "money", "here")
word <- c("is", "the")
matching <- function (t, words){
# initialize vector
tmp <- c()
for (i in 1:length(t)) {
if (t[i] != words[2]){
tmp <- c(tmp, t[i])
}
}
return(tmp)
}