首页 > 解决方案 > 检查函数中的字符条目是否在 R 中的向量集中

问题描述

拜托,我正在尝试根据用户的条目打印一条消息。我正在为测试而学习,我想创建一个函数,如果我键入特定的文章(变量字符),它将检查一组向量并打印一条消息。

ExpfromUS <- function(x){
  x <- readline("Check if your articles could be import or export to US. Entry the type of article that you want to ship:   ")
  a <- c(x == CBOExUS)
  b <- c(x == RQSVExUS)
  e <- c(x == NATExUS)
   for ( i in length(a == TRUE)){      
        if (a[i] == TRUE){
        print("Ok, but just with Contractual basis only");
              break; }
        else{ for (i in length(b)){
              if (b[i] == TRUE){
              print("Ok, but with restrictions of quantity, size or value");
                    break;}
              else{ for (i in length(c)){
                    if (e[i] == TRUE){
                    print("Sorry, but we are not able to ship your cargo at this moment");
                          break;}
                    else{ print("Please check your entry we could not find this article in our database")
                          }}
              }
              }

        }
  }

}

但是总是打印最后一条消息“请检查您的条目,我们在我们的数据库中找不到这篇文章”,我做错了什么?(对不起,这是一个初学者级别的疑问)。感谢所有花时间帮助我的人。

标签: r

解决方案


扩展我的评论:我怀疑您对所有for循环的索引是(部分)问题。当前索引只会导致一次迭代,因为length(a == TRUE)将返回一个整数。我怀疑您想要“a == TRUE”的数值,以便您可以在该行输出一条消息。该which函数返回与逻辑向量的“TRUE”值的索引相对应的数值,所以也许你想要:

    for ( i in which(a) ){   
           ....}
           else{ for (i in which(b)){
                ...}
               else{ for (i in which(c)){
                     ....}

进一步注意:在使用逻辑向量时,很少需要包含 == TRUE,并且当向量包含 NA 时,有时会返回意外结果,因为 NA 永远不会包含==任何内容。

鉴于您为这三个向量提供的值,我现在认为它应该是

 {....
  a <-  x %in% CBOExUS  # the c() not needed. This returns a logical vector
  b <-  x %in% RQSVExUS
  e <-  x %in% NATExUS
  .....

%in%函数允许您测试多个值。该==函数询问是否存在完全相等,显然不太可能。这些更正可能还有其他缺陷,但我们仍然没有 [MCVE],因此我们仍然无法提供经过测试的编码。


推荐阅读