Как посчитать, сколько элементов удовлетворяют условию идиоматическим способом? - PullRequest
10 голосов
/ 30 ноября 2010

Имея эти данные:

> data
 [1] 1290603356 1290603360 1290603350 1290603344 1290603340 1290603373
 [7] 1290603354 1290603359 1290603345 1290603363 1290603357 1290603354
[13] 1290603364 1290603349 1290603352 1290603365 1290603349 1290603343
[19] 1290603339 1290603343
> offsets <- c(0, 0.5,1,2,4,8,24,4*24,7*24) * 3600)
[1]   1800   3600   7200  14400  28800  86400 345600 604800
> myoffsets <- min(data)+offsets

существо, список эпох UNIX и список смещений (0,5 часа, 1 час, 2 часа, 4 часа ...) Я хочу иметь возможность построить график, сколькоиз эпох <= чем мин (данные) + смещение </p>

В этом примере это будет

1 20 20 20 20 20 20 20

Я нашел, как это сделать с помощью цикла for:

for(i in c(1:length(myoffsets))) myres$x[i] <- length(data[data <= myoffsets[i]])

Но я уверен, что есть идиоматический способ, если сделать это не так запутанно?

Ответы [ 2 ]

5 голосов
/ 30 ноября 2010

Предложение 1: Немного более идиоматическим способом было бы заменить

длина (данные [данные <= myoffsets [i]]) </p>

с

сумма (данные <= myoffsets [i]) </p>

Таким образом, вы не получите подмножество data для каждого значения в myoffsets только для вычисления его длины и отбрасывания.

Предложение 2: c() в for является избыточным. Следующее будет делать то же самое с меньшим количеством нажатий клавиш: for(i in 1:length(myoffsets)).

Наконец , если вы предпочитаете избавиться от явного цикла, что-то вроде этого может быть на ваш вкус:

myres $ x <- sapply (myoffsets, function (o) sum (data <= o)) </p>

0 голосов
/ 30 ноября 2010
plot(subset(data, data <= min(data+offset)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...