如何通过向量传递样本大小?

How to pass sample size through a vector?

我有一份清单,我想要样品。样本数量应对应于向量中的数量。问题是他只为所有列表条目取 sample_size 中的第一个数字。 我希望有人能帮助我!


liste_mpg<-plyr::dlply(mtcars,"mpg")
sample_size<-c(2,6,7,1,4,8,9,0,7,9,3,4,6,1,8,4,3,2,6,7,4,6,9,1,4)
test_list<-lapply(liste_mpg, function(x) sample(x,size = sample_size))

我们可以使用base R中的Map根据listvector(或另一个list)的对应元素进行采样

Map(function(x, y) sample(x, size = y), liste_mpg, sample_size)

对于 lapply,问题在于它循环遍历 'liste_mpg' 的元素,而 'sample_size' 是完整向量。相反,可以遍历 list 的序列,根据该索引提取相应的元素并执行 sample

lapply(seq_along(liste_mpg), function(i) 
    sample(liste_mpg[[i]], size = sample_size[i]))

或等同于 purrr

中的 map2
map2(liste_mpg, sample_size, ~ sample(.x, size = .y))

改用 sapplymapply 的多元版本。

mapply(function(x, s) sample(x, s), liste_mpg, sample_size)

或者,简单地

mapply(sample, liste_mpg, sample_size)