Проверка, находится ли запись символа в функции в наборе векторов в R - PullRequest
0 голосов
/ 04 декабря 2018

Пожалуйста, я пытаюсь напечатать сообщение, основанное на записи пользователя.Я готовлюсь к тесту и хочу создать функцию, которая, если я наберу определенную статью (переменный символ), проверит набор векторов и напечатает сообщение.

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

        }
  }

}

Но всегда печатайте последнее сообщение «Пожалуйста, проверьте вашу запись, мы не смогли найти эту статью в нашей базе данных», что я делаю не так?(Извините, это сомнение для начинающих).Спасибо всем, кто уделяет мне время.

1 Ответ

0 голосов
/ 04 декабря 2018

Расширение моего комментария: я подозреваю, что ваша индексация для всех циклов for является (частью) проблемой.Текущее индексирование будет вызывать только одну итерацию, поскольку length(a == TRUE) вернет одно целое число.Я подозреваю, что вы хотели числовые значения, где "== TRUE", чтобы вы могли вывести сообщение в этой строке.Функция which возвращает числовые значения, соответствующие индексу значений «ИСТИНА» логического вектора, поэтому, возможно, вы хотели:

    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], и поэтому мы все еще не сможем предложить проверенное кодирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...