2015-08-25 5 views
0

Предположим, что у меня есть следующая таблица информации:Проблема с тем, если-заявление с использованием любого() и применить()

firstname <- c('Todd','Sven','Robert','Jovan','Angelo') 
city <- c('Edmond', NA ,'Miami','Houston', NA) 
state <- c('OK','KS', NA, 'TX', NA) 
job <- c('Clown','Plumber','Professor', 'Uber Driver', 'Therapist') 

list_test <- data.frame(firstname, city, state, job) 
list_test 

    firstname city state   job 
1  Todd Edmond OK  Clown 
2  Sven <NA> KS  Plumber 
3 Robert Miami <NA> Professor 
4  Jovan Houston TX Uber Driver 
5 Angelo <NA> <NA> Therapist 

Я хочу вернуть сообщение, если какой-либо из столбцов NA, которые могут быть которые были определены следующим образом:

any(apply(list_test, 2, function(x){any(is.na(x))})) 
[1] TRUE 

Моя мысль заключается в создании простого оператора if-return, как показано ниже.

if(any(apply(list_test, 2, function(x){any(is.na(x))}))) { 
    return("At least one row has an NA value.") 
} 

Однако, я получаю следующее сообщение об ошибке:

Error: no function to return from, jumping to top level 

Я смущен, почему я получаю сообщение об ошибке.

Спасибо!

+0

Возможно, вы имели в виду 'print' или' stop', а не 'return'? Кроме того, возможно, более идиоматично делать 'any (sapply (list_test, function (x) {any (is.na (x))}))'. – joran

+0

Ваше определение «если какой-либо из столбцов является NA» в основном совпадает с «есть ли какое-либо NA в data.frame», и в этом случае мы можем просто «any (is.na (list_test))». Ваш код возвращает ошибку, потому что 'return()' может быть помещен только в функцию. – Vlo

+0

Спасибо вам обоим. Я попытался «остановить» и «предупредить» с успехом. – glonn

ответ

1

комментария Vlo по выше корректен:

return() работает только как часть функции, а именно: он возвращает конечное значение функции. У вас нет функции в вашем заявлении if, поэтому вы получите сообщение об ошибке от return().

Попробуйте запустить return("foo bar") в интерактивном режиме - вы увидите то же сообщение об ошибке.

Как указано в joran, используйте print для печати на консоль, а не возврата.

+0

Да, подтверждено. Благодаря! – glonn

Смежные вопросы