R-拆分+列表功能

时间:2015-06-09 16:28:51

标签: r

有人能解释一下R中的分割和列表功能吗?我很困惑如何一起使用它们。例如

x <- rnorm(10)
a <- gl(2,5)
b <- gl(5,2)
str(split(x,list(a,b))    

我得到的结果是

List of 10
$ 1.1: num [1:2] 0.1326 -0.0578
$ 2.1: num(0) 
$ 1.2: num [1:2] 0.151 0.907
$ 2.2: num(0) 
$ 1.3: num -0.393
$ 2.3: num 1.83
$ 1.4: num(0) 
$ 2.4: num [1:2] 0.4266 -0.0116
$ 1.5: num(0) 
$ 2.5: num [1:2] 0.62 1.64

x中的值如何分配到list(a,b)中的某个级别?为什么有些级别没有任何值,有些级别有很多值?我认为x中的值与list(a,b)的级别之间没有任何关系。他们是随机分配的吗?

如果有人可以帮我解决这个问题,那真是太过分了。

1 个答案:

答案 0 :(得分:2)

当您致电split(x, list(a, b))时,如果两个x值具有相同的ab值并且位于不同的值,那么这两个list(a, b) # [[1]] # [1] 1 1 1 1 1 2 2 2 2 2 # Levels: 1 2 # # [[2]] # [1] 1 1 2 2 3 3 4 4 5 5 # Levels: 1 2 3 4 5 值属于同一组除此之外。

split(x, list(a, b))

我们可以看到x中的前两个元素将在组“1.1”(a = 1和b = 1的组)中,接下来的两个将在组1.2中,下一个将在组1.3,下一组将在组2.3中,接下来的两组将在组2.4中,最后两组将在组2.5中。这正是我们在致电split(x, list(a, b)) # $`1.1` # [1] -0.2431983 -1.5747339 # $`2.1` # numeric(0) # $`1.2` # [1] -0.1058044 -0.8053585 # $`2.2` # numeric(0) # $`1.3` # [1] -1.538958 # $`2.3` # [1] 0.8363667 # $`1.4` # numeric(0) # $`2.4` # [1] 0.8391658 -1.0488495 # $`1.5` # numeric(0) # $`2.5` # [1] 0.3141165 -1.1813052 时看到的:

a

您有额外空组(例如,组2.1)的原因是bx具有一些值,其中没有?split值。从drop=TRUE开始,您可以看到输出中未包含这些内容的方法是使用split(x, list(a, b), drop=TRUE) # $`1.1` # [1] -0.2431983 -1.5747339 # $`1.2` # [1] -0.1058044 -0.8053585 # $`1.3` # [1] -1.538958 # $`2.3` # [1] 0.8363667 # $`2.4` # [1] 0.8391658 -1.0488495 # $`2.5` # [1] 0.3141165 -1.1813052 选项:

var newElem = new Element.tag('mediator-form')
  ..attributes['mediator'] = 'Medication';