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

时间:2019-07-18 14:14:14

标签: r list sample

我有一个清单,我想有样品。样本数应与向量中的数相对应。问题在于,对于所有列表条目,他仅采用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))

2 个答案:

答案 0 :(得分:3)

我们可以使用Map中的base R根据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]))

或等同于map2中的purrr

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

答案 1 :(得分:2)

改为使用sapplymapply的多元版本。

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

或者简单地

mapply(sample, liste_mpg, sample_size)