R-拆分+;列表函数

R-拆分+;列表函数,r,R,有人能解释一下R中的拆分和列表功能吗?我很困惑如何将它们结合使用。比如说 x <- rnorm(10) a <- gl(2,5) b <- gl(5,2) str(split(x,list(a,b)) 如何将x中的值分配给列表(a,b)中的级别?为什么有些级别没有任何值,有些级别有许多值?我看不到x中的值与列表(a,b)的级别之间有任何关系。他们是随机分配的吗 如果有人能帮我,我真的很感激 当您调用split(x,list(a,b))时,您基本上是说两个x值在同一组中

有人能解释一下R中的拆分和列表功能吗?我很困惑如何将它们结合使用。比如说

x <- rnorm(10)
a <- gl(2,5)
b <- gl(5,2)
str(split(x,list(a,b))    
如何将
x
中的值分配给
列表(a,b)
中的级别?为什么有些级别没有任何值,有些级别有许多值?我看不到
x
中的值与
列表(a,b)
的级别之间有任何关系。他们是随机分配的吗

如果有人能帮我,我真的很感激

当您调用
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
我们可以看到,x中的前两个元素将在组“1.1”(a=1和b=1)中,下两个元素将在组1.2中,下一个元素将在组1.3中,下一个元素将在组2.3中,下两个元素将在组2.4中,最后两个元素将在组2.5中。这正是我们在调用
split(x,list(a,b))
时所看到的:

有额外的空组(例如组2.1)的原因是
a
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

你读过
?split
:第二个参数是“a‘factor’,意思是as.factor(f)定义了分组,或者定义了此类因素的列表,在这种情况下,它们的交互作用用于分组。”(强调我的)。同样
相同(split(x,list(a,b)),split(x,interaction(a,b))
返回
TRUE
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
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