2015-06-12 2 views
2

У меня есть кадр err данных, состоящий из 796 строк и столбцов 54432Как бороться с NA при использовании lappy в R

я должен проверить столбцы, которые имеют значение, не превышающие 20 и -20.

Это мой подход:

do.call(cbind, (lapply(err, function(x) if((all(x<20) & all(x>-20))) return(x)))) 

I Have NA значения во всех столбцах и после я получил

Error in if ((all(x < 20) & all(x > -20))) return(x) : 
    missing value where TRUE/FALSE needed 

Я обновить команду, используя !is.na как:

do.call(cbind, (lapply(err, function(x) if(!is.na(all(x<20) & all(x>-20))) return(x)))) 

Но в этом случае сообщаются все столбцы, и фильтр не работает.

Любая помощь?

+2

как о '' min' & max', где вы можете использовать 'на .rm = T' – mts

+1

@mts, вы должны отправить ответ, кажется отличным вариантом. – Cath

+0

@VeerendraGadekar lapply также может принимать данные. «L» относится к типу возврата – Chris

ответ

3

Поскольку я не имею пример ДФ проверить, работает ли это для вас:

do.call("cbind", lapply(err, function(x) if(min(x, na.rm=T) > -20 & max(x, na.rm=T) < 20) return(x))) 
+2

вам, вероятно, нужно будет поставить -20 между скобками, чтобы избежать путаницы с символом назначения (<-), и это, вероятно, наоборот. (Max <20 и min> (- 20)) – Cath

+1

@CathG Right. Я сделал редактирование. Пустое место тоже работает. – nicola

+0

@nicola, справа, до тех пор, пока <и - не находятся рядом друг с другом. Я отредактирую для проблемы «по-другому» ... – Cath

1

apply Использование

err[apply(err, 2, function(x) min(x,na.rm=T) > -20 & max(x,na.rm=T) < 20)] 
Смежные вопросы