尝试循环if条件时接收错误:"参数长度为零"

时间:2018-04-06 15:48:46

标签: r for-loop

我想检查一个数据帧列的所有单元格是否包含另一个数据帧的所有单元格的单词。

我成功检查了数据帧的某个单元格是否包含具有以下代码的另一个数据帧的某个单元格:

if(grep(geoplaces$name[1], adresses$Comments[1])){
  print("hello")
} else {
  print("error")
}

所以现在我想为所有地理位置$ name和所有地址行循环该函数$ Comments:

所以我添加了以下代码:

 ig <- 1
 ia <- 1

 for(ia in 1:8){
     for(ig in 1:8){
         if(grep(geoplaces$name[ig], adresses$Comments[ia])){
             print("hello")
             ig <- ig + 1
         } else {
             print("error")
             ig <- ig + 1
         }
      }
      ia <- ia + 1
 }

但是我收到以下错误:

  

if中的错误(grep(geoplaces $ name [ig],地址$ Comments [ia])){:     参数的长度为零。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

问题是grep返回索引而不是逻辑值。您想使用grepl来返回逻辑值。请参阅grep documentation

编辑: 有几件事可能会导致你的后续错误:

  • geoplaces和/或addresses包含少于8行的数据
  • geoplaces包含在进行grepl比较之前需要处理的NA值(R认为搜索模式未定义)

没有完整的数据集是不可能的。基本函数is.nanrow可以帮助处理这两种可能性。