R:将列表拆分为子列表时出错

时间:2016-08-05 09:21:25

标签: r list split lapply

假设我们得到了这个数据帧

X <- data.frame(A = rnorm(11000, sd = 0.8),
                B = rnorm(11000, mean = 10, sd = 3),
                C = sample( LETTERS[1:24], 11000, replace=TRUE),
                D = sample( letters[1:24], 11000, replace=TRUE),
                E = round(rnorm(11000,mean=25, sd=3)),
                F = round(runif(n = 11000,min = 1000,max = 25000)),
                G = round(runif(11000,0,200000)))

我们需要分几次。我们的目标是获得一个类似下面示例的列表:

Acc : Large list (24 elements, XX Mb)
..A:List of XX
.. ..a: List of XX
.. .. ..$ 21: 'data.frame' : XX obs. of 7 variables :
.. .. .. ..$ D: num[1:XX] XXX
.. .. .. ..$ other variables
.. .. ..$ 22: 'data.frame' ...
.. .. ..$ other lists
.. ..b : List of XX
.. ..other Lists
..B: List of XX
..etc... 

We use this code to do this :

Acc <- split(X,X$C,drop = TRUE)
Acc <- lapply(Acc, function(x) split(x , x$D, drop = TRUE))
Acc <- lapply(Acc, function(x,c) split(x$c , x$c$E, drop = TRUE))
Acc <- lapply(Acc, function(x,c,f) split(x$c$f, x$c$f$G, drop = TRUE))

最后,我们收到此错误:

Error in split.default(x$c$f, x$c$f$G, drop = TRUE) : 
  first argument must be a vector

不使用c/f

Acc <- split(X,X$C,drop = TRUE)
Acc <- lapply(Acc, function(x) split(x , x$D, drop = TRUE))
Acc <- lapply(Acc, function(x) split(x , x$E, drop = TRUE))

我们得到了

Error in split.default(x, x$E, drop = TRUE) : 
  group length is 0 but data length > 0

我有一些问题:

1 - 这个错误是由x$c$f在某些情况下只获得一个元素并且不被视为向量的事实引起的吗? 编辑:经过其他一些测试后,似乎这一点不是问题。

2 - 当我运行我的代码时,在分裂的第三步中我得到的东西似乎是不正确的。它不像上面那样:Acc - A - a - 21,它看起来像:

Acc : Large list (24 elements, XX Mb)
..A:List of XX
.. ..$ 18:'data.frame'

所以,它不是一个类似于Acc - A - a - 21的列表,而是Acc - A - 21。我的问题只是“为什么?”

3 - 是否有比split / lapply更聪明的功能来拆分和拆分列表?

如果有人能提供帮助,我会很高兴。

0 个答案:

没有答案