Я хотел бы создать функцию, которая сначала проверяет, чтобы аргументы, переданные этой функции, были действительны. Моя конкретная функция принимает два аргумента, и мне удалось проверить правильность первого аргумента. Однако проверка второго аргумента дает мне проблемы.Проверка правильности аргументов функции в R
Я хотел бы проверить, что вход для state
является членом state.abb
. Кажется, это работает правильно.
Я также хочу проверить, что вход для outcome
является членом "heart attack", "heart failure", "pneumonia"
. Это работает неправильно.
Вот мой код до сих пор:
best <- function(state, outcome){
## Read outcome data
outcome <- read.csv("outcome-of-care-measures.csv", colClasses = "character")
## Check that state and outcome are valid
if (!any(state == state.abb)){
stop("invalid state")
}
if (!any(outcome == c("heart attack", "heart failure", "pneumonia"))){
stop("invalid outcome")
}
## The function will do other things after this is sorted out.
}
Когда я вхожу неправильно состояния аббревиатуры функция дает мне правильную ошибку:
> best("FF", "heart failure")
Error in best("FF", "heart failure") : invalid state
Теперь, когда я вхожу в правильное состояния аббревиатура и неправильный результат, как представляется, дает мне правильную ошибку:
> best("CA", "this is wrong")
Error in best("CA", "this is wrong") : invalid outcome
Но эта же ошибка сохраняется даже тогда, когда у меня есть правильный аргумент для исхода:
> best("CA", "heart failure")
Error in best("CA", "heart failure") : invalid outcome
Может кто-нибудь дать мне удар в правильном направлении по сортировке проверки валидности второго аргумента?
Edit: Per lukeA «s комментарий представляется проблема может вытекать из команды read.csv
. Теперь я включил эту команду в указанный выше код.
Не воспроизводимо. 'best (" CA "," heart failure ")' здесь не вызывает ошибку, если 'CA' находится в' state.abb'. Совет. Вы также можете написать 'stopifnot (результат% в% c (« сердечный приступ »,« сердечная недостаточность »,« пневмония »)). – lukeA
@ lukeA Вы совершенно правы. Я удалил команду 'read.csv' из исходного сообщения, так как не думал, что это имеет значение, но, похоже, это способствует этой проблеме. Означает ли это, что это помогает? –
Что вы подразумеваете под "удалить"? Если вы не читаете в своих данных, как вы можете его обработать? Вы каким-то образом создали свои образцы данных, и если да, сделайте 'str' в обеих версиях. Скорее всего, где-то существует несоответствие класса, или, возможно, пробельный символ мешает. –