我有一个奇数行,2435行的一维数组。我想将数组拆分成更小的数组,每次都进行一次小测试。
首先,我想将大数组拆分成两个较小的数组。
然后我想将我的数组分成4个较小的数组,然后分成8个小数组,依此类推。
任何人都可以帮忙吗?
以下是一个例子:
A< -1:2435
A1 1,2,3,4,...,1237
A2 1238,1239,...,2435
提前致谢
答案 0 :(得分:0)
为什么不简单地使用split()
功能?例如(使用奇数长度将返回警告,但没关系):
split(x = 1:11, f = 1:2) # to split into 2 distinct list elements
#$`1`
#[1] 1 3 5 7 9 11
#
#$`2`
#[1] 2 4 6 8 10
split(x = 1:11, f = 1:4)
#$`1`
#[1] 1 5 9
#
#$`2`
#[1] 2 6 10
#
#$`3`
#[1] 3 7 11
#
#$`4`
#[1] 4 8
如果你真的热衷于分裂为2,然后再分为2,你可以随时使用lapply()
函数,该函数适用于列表的每个元素:
lapply(split(x = 1:11, f = 1:2), split, f = 1:2)
#$`1`
#$`1`$`1`
#[1] 1 5 9
#
#$`1`$`2`
#[1] 3 7 11
#
#
#$`2`
#$`2`$`1`
#[1] 2 6 10
#
#$`2`$`2`
#[1] 4 8
嵌套结构有点痛苦,但还有其他方法可以解决这个问题,例如:
L <- split(x = 1:11, f = 1:2) # the main (first) split
names(L) <- letters[1:length(L)] # names the main split a and b
LL <- lapply(L, split, f = 1:2) # split the main split
unlist(LL, recursive = F)
#$a.1
#[1] 1 5 9
#
#$a.2
#[1] 3 7 11
#
#$b.1
#[1] 2 6 10
#
#$b.2
#[1] 4 8
答案 1 :(得分:0)
如果要将数据拆分到数组的中间,还可以使用split函数:
a <- 1:2435
divide <- function(x, n = 2)
{
i <- ceiling(length(x)/n)
split(x,x%/%i+1)
}
divide(a)
并且您可以使用更多部件
divide(a, n = 4)
或者在两次尝试中使用
lapply(divide(a,2),function(x) divide(x,2))
n值越高,由于四舍五入问题,尺寸将不再相等。这保证使用嵌套方法。