我有以下数据框。
Data_Frame <- data.frame(Factor_1 = rep(LETTERS[1:4], each = 12, length.out = 48), Factor_2 = rep(letters[1:3], each = 4, length.out = 48), Factor_3 = rep(1:2, each = 2, length.out = 48), Response = rnorm(48, 25, 1))
我想创建一个嵌套列表,其中我已按研究中的每个因素连续拆分数据框。我将从一个包含列名的向量开始,这些列名包含我想按其拆分数据框的因素(此向量将按我希望结果列表嵌套的顺序包含这些因素)。
Factors_to_Split_by <- c("Factor_1", "Factor_2", "Factor_3")
结果列表应类似于以下Output
对象。
Output <- lapply(lapply(split(Data_Frame, Data_Frame[, which(colnames(Data_Frame) == Factors_to_Split_by[1])]), function (x) {
split(x, x[, which(colnames(x) == Factors_to_Split_by[2])])
}), function (x) {
lapply(x, function (y) {
split(y, y[, which(colnames(y) == Factors_to_Split_by[3])])
})
})
我如何编写一个递归函数,将Factors_to_Split_by
其用作输入并返回所需Output
列表作为输出?我可能有超过 3 个因素来划分数据,并且我想要一些模块化、高效和程序化的东西。
谢谢!
以下是使用
Reduce
自定义函数的一种可能方法:您可以像这样定义递归函数
使得