#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; для этого. Спасибо вам за то, что сделали мой код более эффективным.