Проблема связана с использованием rowSums
, что предполагает двумерный ввод. Но вы apply
используете функцию по одной строке за раз, и поэтому вход x
является одномерным вектором. Измените rowSums
на sum
:
function(x) {! any(sum(x[1:10])>=5) && any(sum(x[11:20])>=5) })
Кроме того, если я правильно понимаю ваш вопрос, !
должен применяться к обоим критериям, но сейчас он влияет только на первый критерий. Так что измените ! any() && any()
на !(any() && any())
.
Вот альтернативный подход, который не использует apply
:
# create example data
set.seed(1234)
MyData <- as.data.frame(matrix(runif(200, 0, 2), 10, 20))
# convert to true/false for above threshold
MyData_filter <- MyData >= 1
# perform your 10-columns-at-a-time check
keeps <- rowSums(MyData_filter[ , 1:10])<5 &
rowSums(MyData_filter[ ,11:20])<5
# filter your data according to that 10-columns-at-a-time check
MyData_Filtered <- MyData_filter[keeps, ]