Указание, сколько чисел может быть в аргументе

#r

Вопрос:

Заранее извиняюсь, если это глупо простой вопрос, который уже где-то здесь. Я выполняю задание для моего курса программирования для R. Для одного из вопросов нашего задания наш профессор попросил нас создать определенную функцию. Два утверждения о достоверности, которые он хочет, чтобы мы добавили в нашу функцию, — это «Остановить выполнение и вывести соответствующее сообщение об ошибке, если аргумент не числовой или содержит более одного числа».

Я знаю, как проверить достоверность первого, я понятия не имею, как проверить достоверность последнего. Предполагается, что аргумент должен быть только одним числовым элементом.

Комментарии:

1. Проверьте правильность length вашего числового ввода. Это должно быть 1.

2. @deschen Это то, что я поставил: if(length(a)!= 1) stop(Ошибка: «Это содержит более одного числа») Когда я запускаю функцию и ввожу вектор как «a», проверка на ошибку не отображается.

3. @deschen Заставил его работать после исправления моего синтаксиса. Спасибо вам за вашу помощь! Ты спас меня.

4. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Ответ №1:

Вы можете объединить два логических теста is.numeric(x) и length(x) == 1 с логическим значением И (используя amp; символ).

Например, следующая функция должна выдавать правильные ответы:

 f <- function(x) {
   if(!(is.numeric(x) amp; length(x) == 1)) {
      stop(paste(x, collapse = ","), " is not a single number")
   }
   cat(x, "is a single number")
}
 

Давайте проверим это с помощью разных входных данных:

 f(1)
#> 1 is a single number

f(c(1, 2))
#> Error in f(c(1, 2)): 1,2 is not a single number

f("a")
#> Error in f("a"): a is not a single number

x <- 1:3

f(x)
#> Error in f(x): 1,2,3 is not a single number

f(x[3])
#> 3 is a single number
 

Создано 2021-10-31 пакетом reprex (v2.0.0)

Комментарии:

1. Я даже не думал использовать amp; для этого. Спасибо вам за то, что сделали мой код более эффективным.