首页 > 解决方案 > 将一定数量的行传递给R中的函数

问题描述

我想将 1500 行传递给一个函数,直到到达数据集的末尾。目前我硬编码了行数我的代码

AA1 = AA[1:1500,]
AA2 = AA[1501:3000,]
AA3 = AA[3001:4500,]
AA4 = AA[4501:6000,]
AA5 = AA[6001:6573,]
#passing into the function generate_pa
AAdone1 = generate_pa(AA1)
AAdone2 = generate_pa(AA2)
AAdone3 = generate_pa(AA3)
AAdone4 = generate_pa(AA4)
AAdone5 = generate_pa(AA5)

无论如何我可以有效地做到这一点吗?我应该创建一个for循环吗?

标签: r

解决方案


chuncksize您可以使用将 data.table 拆分为大小块data.table::split

然后,您可以使用将结果列表l提供给任何函数lapply( l, ...)

它实际上做了什么:
setDT(AA)将AA转换为data.table
[, rowID := (.I-1) %/% chunksize]创建一个新列,基于rownumber整数除法,.I使用,因为data.table没有rownames。
然后将结果按新创建的 - 列拆分rowID

#sample data
set.seed(123)
AA <- data.frame( data = rnorm(10))

#     data
# 1  -0.56047565
# 2  -0.23017749
# 3   1.55870831
# 4   0.07050839
# 5   0.12928774
# 6   1.71506499
# 7   0.46091621
# 8  -1.26506123
# 9  -0.68685285
# 10 -0.44566197

chunksize = 3
l <- split( setDT(AA)[, rowID := (.I-1) %/% chunksize][], by = "rowID")

# $`0`
#          data rowID
# 1: -0.5604756     0
# 2: -0.2301775     0
# 3:  1.5587083     0
# 
# $`1`
#          data rowID
# 1: 0.07050839     1
# 2: 0.12928774     1
# 3: 1.71506499     1
# 
# $`2`
#          data rowID
# 1:  0.4609162     2
# 2: -1.2650612     2
# 3: -0.6868529     2
# 
# $`3`
#         data rowID
# 1: -0.445662     3

推荐阅读