R:从向量中删除元素时出错

时间:2017-02-02 06:23:56

标签: r

我创建了一个非常基本的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功能

2 个答案:

答案 0 :(得分:0)

假设您要从word中仅删除t的第2个元素,我们可以尝试使用grep及其invertvalue属性

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)
}