R语言中向列表的列表添加子列表时遇到的问题
问题原因与解决方法
问题根源
- 第一种写法中,
as.list(data)会把抽取的10个数据点拆分成10个独立的列表元素,通过append添加后,sub_samples最终是包含n_of_subsamples*10个单个数据点的大列表,而非预期的每个元素含10个数据点的子列表。 - 第二种写法错误将
sub_samples初始化为数值向量,赋值时as.list(data)被强制适配向量结构,导致结果不符合要求。
正确实现方式
方式一:循环赋值(直接操作列表元素)
sub_samples <- list() n_of_subsamples <- 5 # 替换为实际需要的子样本数量 for (i in 1:n_of_subsamples) { # 用[[i]]将10个数据点作为整体存入列表的第i个位置 sub_samples[[i]] <- sample(data_set, 10) } # 提取第一个子样本(返回包含10个数据点的列表元素) sub_samples[1] # 若需要直接获取向量形式的子样本,用双括号索引 sub_samples[[1]]
方式二:用lapply替代循环(更简洁)
R中推荐用向量化操作替代循环,lapply会直接生成每个元素为10个数据点的列表:
n_of_subsamples <- 5 sub_samples <- lapply(1:n_of_subsamples, function(x) sample(data_set, 10))
补充说明
如果坚持用append,需要把抽取的10个数据点先包装成单个列表元素再添加:
sub_samples <- list() for (i in 1:n_of_subsamples) { data <- sample(data_set, 10) # 用list(data)将向量包装为单个列表元素,避免拆分 sub_samples <- append(sub_samples, list(data)) }
内容的提问来源于stack exchange,提问作者Johnny
相关产品推荐
相关产品推荐

