在R中循环从嵌套列表的每个子列表随机选4行并生成数据框
解决方案
基础R实现
你可以通过自定义函数结合基础R的lapply和do.call完成需求:
# 定义处理单个子列表的函数:对每个向量随机抽取4个元素并转成数据框 sample_sub_list <- function(sub_list) { sampled_vecs <- lapply(sub_list, function(x) sample(x, size = 4)) as.data.frame(sampled_vecs) } # 遍历嵌套列表处理所有子列表,再合并为单个数据框 final_result <- do.call(cbind, lapply(list_all, sample_sub_list)) # 输出结果 final_result
Tidyverse 实现
如果偏好tidyverse工具链,可以用purrr和dplyr简化代码:
library(purrr) library(dplyr) final_result <- list_all %>% map(~ { .x %>% map(~ sample(.x, 4)) %>% bind_cols() }) %>% bind_cols() # 输出结果 final_result
注意事项
- 如果原列表中存在长度不足4的向量,
sample会报错,此时可以添加replace = TRUE参数允许重复抽取:sample(x, size = 4, replace = TRUE); - 示例中
b = 20:30包含11个元素、a = 1:10包含10个元素,抽取4个后长度统一为4,因此合并不会出现维度不匹配问题。
内容的提问来源于stack exchange,提问作者i.b
相关产品推荐
相关产品推荐

