Ответ Дирка, конечно, правильный, но чтобы добавить дополнительное объяснение, я отправлю свое.
Почему ваш звонок не работает?
Прежде всего, ваш синтаксис является сокращением. Это эквивалентно
ddply(larger_data, .(species), function(dfrm) subset(dfrm, samp))
, чтобы вы могли четко видеть, что вы предоставляете function
(см. class(samp)
) в качестве второго аргумента subset
. Вы можете использовать samp(dfrm)
, но это тоже не сработает, потому что samp
return data.frame
и subset
нужен логический вектор. Таким образом, вы можете использовать samp(dfrm)
, когда он возвращает логическое индексирование.
Как использовать подмножество в этом случае?
Заставьте subset
работать, накормив его логическим вектором:
ddply (larger_data, .(species), subset, sample(seq_along(species)<=40))
Я создаю логический вектор с 40 TRUE
(кстати, он работает, когда для некоторых видов меньше 40 случаев, затем он возвращает все) и случайным образом.