在包含128个元素的列表中拆分每个元素,这些元素在R中具有不同的大小

在包含128个元素的列表中拆分每个元素,这些元素在R中具有不同的大小,r,R,我有一个数据框架,它有7个变量,每个变量有500个观察值。 我使用powerset函数获得了这个数据集的所有子集。现在,我有一个128个子集的列表,每个都有不同的大小。我的意思是,我有128个不同的数据集。 如何从列表中拆分这128个子集? 这是我到目前为止所拥有的 #data generation part x1=rnorm(n=500, m=2, sd=1); x2=rbinom(n=500, 1 , 0.6); y=rbinom(n=500, 1 , 0.7); r1=rbinom(n=

我有一个数据框架,它有7个变量,每个变量有500个观察值。 我使用powerset函数获得了这个数据集的所有子集。现在,我有一个128个子集的列表,每个都有不同的大小。我的意思是,我有128个不同的数据集。 如何从列表中拆分这128个子集? 这是我到目前为止所拥有的

#data generation part

x1=rnorm(n=500, m=2, sd=1);
x2=rbinom(n=500, 1 , 0.6);
y=rbinom(n=500, 1 , 0.7);
r1=rbinom(n=500, 1 , 0.65);
x1x1=x1*x1;
x1x2=x1*x2;
x1y=x1*y;
x2y=x2*y;
s=rbind(x1,x2,y,x1x1,x1x2,x1y,x2y);
sdata<-data.frame(t(s));

#getting subsets of 7 variables as a list

len = length(sdata)
l = vector(mode="list",length=2^len) ; l[[1]]=numeric()
counter = 1L
for(x in 1L:length(sdata)){
  for(subset in 1L:counter){
    counter=counter+1L
    id=rep(l[[counter]], nrow(l[[counter]]))
    l[[counter]] = data.frame(l[[subset]],sdata[x])
  }
}
数据生成部分 x1=rnorm(n=500,m=2,sd=1); x2=rbinom(n=500,1,0.6); y=rbinom(n=500,1,0.7); r1=rbinom(n=500,1,0.65); x1x1=x1*x1; x1x2=x1*x2; x1y=x1*y; x2y=x2*y; s=rbind(x1,x2,y,x1x1,x1x2,x1y,x2y);
我将忽略平凡(null)子集,并认为你需要其他127个组合。

# This is your data
sdata <- matrix(1:(500*7), 500, 7)

# We generate all the possible combinations (127 cases)

sComb <- do.call(list, unlist(lapply(1:7, function(n) combn(1:7, n, simplify = F)), r = F))

# And then we create all the possible datasets

l <- lapply(sComb, function(i) sdata[,i])
#这是您的数据

sdata请描述预期结果。预期结果是获得128个不同大小的不同数据帧(子集)。我希望它们是分开的。不清楚您的示例中如何获得128个不同的数据帧。非常感谢@duran!这正是我所寻求的。还有一个小细节。当我运行代码时,我看不到前7个子集的变量名(这是我的原始数据)。除这7个变量外,所有其他子集都包含变量名。你有什么解决办法吗?编辑。现在保存变量名。
l <- lapply(sComb, function(i){ x <- matrix(sdata[,i], nrow(sdata)); colnames(x) <- colnames(sdata)[i]; x })