我对列表相当陌生,以前只处理矩阵和数据帧.下面的MWE代码中的createBucket()
函数读取dfList
列表,并创建由dfList
中的"df_one"和"df_Two"元素组成的数据帧的扩展列表.它正确地做到了这一点.然而,我在子列表数据帧名称方面遇到了麻烦.我目前只能通过索引号访问DataFrame,例如运行tMP[1]从列表中提取第一个DataFrame.如何将父/子 struct 添加到命名中,例如,如果我运行类似tmp$df_one(或tmp[["df_one"]的命令,我将获得所有三个df_one数据帧,而运行tmp$df_one$Boy将在"df_one"父数据帧下提供"Boy"子数据帧?
理想情况下,保留数字索引作为提取子列表数据帧的替代方法也很好.如果这是可能的.如果不可能,最重要的是能够按照第一段中描述的字符串名称访问数据帧.
我需要良好的命名/索引,因为这个示例所针对的较大代码最终是跨子列表数据帧的计算密集型代码.在执行计算时,一个子列表数据帧中的一列将需要与另一个子列表数据帧中的另一列(或列/行组合)进行通信.为了能够进行这些计算,我需要一个健壮的命名层次 struct .
代码:
dfVector <- function() {c("DF_One", "DF_Two")}
dfList <- list(DF_One = c("Boy", "Cat", "Dog"), DF_Two = c("Boy", "Rat", "Bat"))
createBucket <- function(nbr_rows) {
series <- dfVector()
series |>
lapply(FUN = \(series_name) {
lapply(dfList[[series_name]], \(element) {
df <- as.data.frame(matrix(0, nbr_rows, 2))
colnames(df) <- c('A', 'B')
setNames(list(df), paste0(series_name, "_", element))
})
}) |>
unlist(recursive = FALSE)
}
tmp <- createBucket(5)