2016-09-28 2 views
0

У меня есть список из 300 + таблиц в списке, и я пытаюсь подсчитать количество раз, когда в таблице нет строк.Пустые числовые векторы после цикла

Так цикл я бегу, чтобы сделать так:

> while (i < 333) { 
    b <- b + (nrow(allInfo[[i]])==0) 
    i <- i + 1 
} 

Я поставил я на 1 и попытался установить б как к 0, а также b <- vector("numeric", 1L) и попытался установить его в «целое». В конце цикла b заканчивается значением «numeric (empty)», и я не смог это понять.

Могу ли я, пожалуйста, получить помощь, почему это так?

+0

Я предполагаю некоторый элемент 'allInfo' не data.frame, может быть NULL, поэтому' nrow (NULL) '' является целым числом (0) ', и любое число плюс' целым числом (0) '' является числовым (0) '. Попробуйте вместо этого использовать 'NROW()' или отфильтровать non-data.frames 'allInfo <- allInfo [! Sapply (allInfo, is," data.frame "))]' –

ответ

0

сделать ответ этого

while (i < 333) { 
    b <- b + (nrow(as.data.frame(allInfo[[i]]))==0) 
    i <- i + 1 
} 

Рича является лучшим.

7

Кажется, вы можете что-то же просто, как

sum(sapply(allInfo, nrow) == 0) 

Это захватывает количество строк каждого элемента в списке, возвращается в виде атомного вектора. Затем мы можем определить число тех, которые равны нулю, и суммировать полученный логический вектор (поскольку целочисленное представление TRUE равно 1).

+0

Это очень большое спасибо. Есть так много функций, что я занят тем, что я как бы пропустил функции s и lapply. Кстати, код, который у меня был выше, работает, но последняя запись файла, который я читал, не вытягивалась, так что это не сработало. Это намного лучше и чище, хотя и очень полезно, так что спасибо снова! – Richard

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