r - 将一定数量的行传递给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循环吗?
解决方案
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
推荐阅读
- c# - 使用多个 async/await 复制文件时出现问题
- javascript - 输入日期javascript html(最小值和最大值)
- git - 如何解决“无法遍历提交的父母”?
- c++ - 现代 C++ 是否有任何等效/替代 boost::archive::iterators 的功能?
- python - Python算法/模型专门使计算机崩溃
- mysql - GROUP BY 使查询非常慢
- java - Spring server.forward-headers-strategy NATIVE vs FRAMEWORK
- r - 从循环中计算每个新数据帧的行数并将所有内容保存在一个循环中
- powershell - 如何在运行空间池中的 PowerShell 中连接和验证代理
- git - 修复或撤消标签上的分离头