有人能解释一下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)
的级别之间没有任何关系。他们是随机分配的吗?
如果有人可以帮我解决这个问题,那真是太过分了。
答案 0 :(得分:2)
当您致电split(x, list(a, b))
时,如果两个x
值具有相同的a
和b
值并且位于不同的值,那么这两个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)的原因是b
和x
具有一些值,其中没有?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';