R语言如何用循环或lapply对多数据框变量批量执行Ks.test
R语言重复KS检验的简化实现方案
你当前的需求是重复调用ks.test(),固定第一组数据为df1$RWS,依次和df2$RWS、df3$RWS、df4$RWS做检验,以下是两种常用的简化实现方式:
方案1:使用lapply()(推荐,R语言惯用向量化写法)
这种方法代码更简洁,后续需要新增对比数据集时仅需修改列表内容即可:
# 第一步:把所有要和df1对比的数据集放进列表 compare_list <- list(df2, df3, df4) # 第二步:遍历列表执行KS检验,结果存在列表中 RW_PD_res <- lapply(compare_list, function(df) ks.test(df1$RWS, df$RWS)) # 提取单个检验结果和原始变量对应关系: # RW1_PD 对应 RW_PD_res[[1]] # RW2_PD 对应 RW_PD_res[[2]] # RW3_PD 对应 RW_PD_res[[3]] # 如果需要直接生成原始的三个独立变量,可以追加以下代码 names(RW_PD_res) <- paste0("RW", 1:3, "_PD") list2env(RW_PD_res, envir = .GlobalEnv)
如果要批量提取所有检验的p值/统计量,可以用以下代码:
# 提取所有KS检验的p值 all_pvalue <- sapply(RW_PD_res, function(x) x$p.value) # 提取所有KS检验的统计量 all_statistic <- sapply(RW_PD_res, function(x) x$statistic)
方案2:使用for循环(逻辑更直观,适合入门学习)
如果对循环结构更熟悉,可以用for循环实现相同逻辑:
# 初始化空列表存结果 RW_PD_res <- list() # 循环执行3次检验 for (i in 1:3) { # get()函数可以通过拼接的对象名字符串调取对应的数据集 target_df <- get(paste0("df", i+1)) RW_PD_res[[i]] <- ks.test(df1$RWS, target_df$RWS) }
内容的提问来源于stack exchange,提问作者Cameron Kirk
相关产品推荐
相关产品推荐

