如何在apply函数中正确使用dplyr的slice_sample()并修复相关报错
代码修正方案
你遇到的问题来自两个核心错误:
lapply返回的结果是list类型,无法直接调用dplyr的mutate方法,需要先把列表内的所有子数据框合并为一个完整数据框slice_sample的调用参数错误,你需要明确指定抽样数量参数n、是否有放回参数replace,不能直接用...承接传入的样本量
修正后可直接运行的完整代码如下:
library(dplyr) # 骰子基础参数定义 dice <- c(1,2,3,4,5,6) dice_probs <- c(1/6,1/6,1/6,1/6,1/6,1/6) dice_df <- data.frame(dice,dice_probs) # 待测试的样本量序列 sample_sizes <- c(10,25,50,100,1000,10000,100000,1000000,100000000) # 使用slice_sample替代sample_n的lapply实现 output_list <- lapply(X=sample_sizes, FUN = function(var){ obs = slice_sample(dice_df, n = var, replace = TRUE) sample_mean = mean(obs$dice) new.df <- data.frame(sample_mean, sample_size = var) return(new.df) }) # 合并列表为数据框,同时计算与期望值3.5的差值 output <- bind_rows(output_list) %>% mutate(difference = 3.5 - sample_mean)
运行后得到的output包含三列:样本均值、对应样本量、与期望值的差值,符合你需要的「样本量越大差值越小」的大数定律验证需求。
内容的提问来源于stack exchange,提问作者Stephen Poole
相关产品推荐
相关产品推荐

