Функция R с двумя аргументами if - PullRequest
1 голос
/ 27 апреля 2019

Я пытаюсь написать функцию, которая принимает два аргумента и выдает два результата.Первая функция должна сравнивать целое число со 100 и предоставлять «недопустимый» для текста.Вот код для этого:

   compare <- function(x) {

   if (!is.numeric(x))  {
   result = "invalid" 
   }
   else if (x>100) {
   result = "Pass"
   }

   else if (x<100) {
   result = "Fail"
   }

   else if (x==100) {
   result = "Neutral"
   }

   print(result)

   }

Вторая функция должна печатать «допустимый», если символ / текст, и ничего не предоставлять, если целое число.

   compare2 <- function(y) {

   if (!is.numeric(y))  {
   result = "valid" 
   }

   else if (!is.numeric(y)) {
   result = ""
   }

   print(result)

   } 

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

 compare <- function(x,y) {....
 }

Моя проблема в том, что я не знаю, как объединить два аргумента в один функциональный блок.Вывод должен выглядеть следующим образом:

 compare(10,"text") ===> "fail","valid"
 compare(100, 90) ===> "neutral"
 compare("text","text") ==> "invalid","valid"

Ответы [ 2 ]

2 голосов
/ 27 апреля 2019

Попробуйте это:

compare <- function(x,y) {
  if (!is.numeric(x))  {
    result = "invalid" 
  }
  else if (x>100) {
    result = "Pass"
  }

  else if (x<100) {
    result = "Fail"
  }

  else if (x==100) {
    result = "Neutral"
  }

  if (!is.numeric(y))  {
    paste(result,'valid', sep = ", ", collapse = NULL)
  }

  else if (!is.numeric(y)) {
    paste(result,'', sep = "", collapse = NULL)
  }
}
1 голос
/ 27 апреля 2019

Как то так? Хотя я предполагаю, что желаемый результат может быть достигнут и другими способами.

compare <- function(x,y) {
result1=vector()

if (!is.numeric(x))  {
result1 <- c(result1,"valid")
}
else if (x>100) {
result1 <- c(result1,"Pass")
}

else if (x<100) {
result1 <- c(result1,"Fail")
}

else if (x==100) {
result1 <- c(result1,"Neutral")
}

 if (!is.numeric(y))  {
result1 <- c(result1,"valid")
}

 cat(paste(shQuote(result1, type="cmd"), collapse=", "))
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...