我有一个包含太多行的数据框,无法进行空间相关图.相反,我想为每个物种抓取40行并在该子集上运行我的相关图.
我编写了一个函数来对数据框进行子集,如下所示:
    samp <- function(dataf)
{
    dataf[sample(1:dim(dataf)[1], size=40, replace=FALSE),]
}
现在我想在更大的数据框架中将此函数应用于每个物种.
当我尝试类似的东西
culled_data = ddply (larger_data, .(species), subset, samp)
我收到此错误:
Error in subset.data.frame(piece, ...) : 
  'subset' must evaluate to logical
有人知道如何做到这一点?
德克答案当然是正确的,但为了增加额外的解释,我发布了自己的答案.
首先,您的语法是速记.它相当于
ddply(larger_data, .(species), function(dfrm) subset(dfrm, samp))
所以你可以清楚地看到你提供function(见class(samp))作为第二个参数subset.你可以使用samp(dfrm),但它也不会工作导致samp返回data.frame并subset需要逻辑向量.所以你可以samp(dfrm)在它返回逻辑索引时使用.
让subset工作由喂他与逻辑矢量:
ddply (larger_data, .(species), subset, sample(seq_along(species)<=40))
我创建了带有40的逻辑向量TRUE(顺便说一下,当某些spieces少于40个案例,然后它返回所有)时随机它.