если команда для проверки на целое число (0) - PullRequest
8 голосов
/ 15 мая 2011

Я использую команду для возврата точек, в которых участники достигают 8 смежных ответов подряд. Команда:

 test <- which( rle(goo)$values==1 & rle(goo)$lengths >= 8)

где:

 goo <- c(1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0)

если участник никогда не достигнет 8 смежных ответов, я бы хотел установить переменную «test» равной -1. В существующем состоянии команда возвращает целое число (0), если 8 последовательных ответов в строке не найдены. Я пытался написать команду if, но не могу понять, что это правильно.

Заранее спасибо,

Будет

Ответы [ 2 ]

14 голосов
/ 15 мая 2011

Если тест равен целому числу (0), то его длина равна 0. Вы также можете привести его к логическому с помощью !

length(test)
0
!(length(test)
TRUE    # and would be FALSE for any vector with normal length
> !(length( c(1,2,3) ))
[1] FALSE

Итак:

> if ( !length(test) ) {test<- -1} 

> test
[1] -1
7 голосов
/ 15 мая 2011

Объединяя @kohske и @hadley ответы в одну строку, вы получаете

if(!any(test <- which(rle(goo)$values == 1 & 
                      rle(goo)$lengths >= 8))) test<- -1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...