r - 用 between() 循环
问题描述
我整理照片,标记包含感兴趣动物的照片组的开始和结束图像。成品看起来像下面的内容。排序后,我通常会使用开始和结束照片作为标记,将感兴趣的照片从每个子文件夹移动到主文件夹以供以后处理。
Primary.Folder | Sub.folder |Start.Image.. |End.Image..
RPU_03262019_05092019 | 100EK113 | 2019-03-26-11-23-46 | 2019-03-26-11-32-02
RPU_03262019_05092019 | 100EK113 | 2019-03-27-08-35-00 | 2019-03-27-08-35-00
RPU_03262019_05092019 | 101EK113 | 2019-03-31-00-29-58 | 2019-03-31-00-59-58
RPU_03262019_05092019 | 101EK113 | 2019-03-31-01-44-58 | 2019-03-31-01-59-58
RPU_03262019_05092019 | 101EK113 | 2019-03-31-03-14-58 | 2019-03-31-03-44-58
RPU_03262019_05092019 | 101EK113 | 2019-03-31-04-34-58 | 2019-03-31-04-39-58
RPU_03262019_05092019 | 101EK113 | 2019-03-31-05-04-58 | 2019-03-31-05-14-58
RPU_03262019_05092019 | 101EK113 | 2019-03-31-05-44-58 | 2019-03-31-05-44-58
RPU_03262019_05092019 | 101EK113 | 2019-03-31-19-30-58 | 2019-03-31-19-40-58
通过拥有所有图像的列表,我希望循环遍历每一行并构建一个新的动物主题照片列表,我可以将它们归档。复制到另一个文件夹中。我希望在这方面能有所帮助。
到目前为止,我已经从总照片列表中的每个文件中删除了 .JPG,以匹配排序后的 csv 中的内容,将 Start.Image.. 列分隔到 t1,将 End.Image.. 列分隔到 t2,并测试了一个 for 循环看看他们是否排队。
fn <- photolist %>% str_replace_all('\\.JPG', '')
t1 <- csvfilled[,4]
t2 <- csvfilled[,5]
#test
for (i in t1) for (j in t2) {
print(paste(i,j,sep=","))
}
# using between() function
for (i in t1) {
for (j in t2){
finalsortedlist<- (fn[between(fn,i, j)])
}
}
测试结果显示 i 和 j 同时运行。看来 i 等待 j 循环通过,然后继续循环 j 再次循环。
"2019-05-09-09-24-24, 2019-05-08-18-35-24"
"2019-05-09-09-24-24, 2019-05-08-19-05-24"
"2019-05-09-09-24-24, 2019-05-08-19-50-24"
"2019-05-09-09-24-24, 2019-05-09-00-09-24"
"2019-05-09-09-24-24, 2019-05-09-09-59-24"
"2019-05-09-09-24-24, 2019-05-09-10-49-24"
有没有办法像下面这样按顺序运行它们?
"2019-03-26-11-23-46, 2019-03-26-11-32-02"
"2019-03-27-08-35-00, 2019-03-27-08-35-00"
"2019-03-31-00-29-58, 2019-03-31-00-59-58"
"2019-03-31-01-44-58, 2019-03-31-01-59-58"
"2019-03-31-03-14-58, 2019-03-31-03-44-58"
"2019-03-31-04-34-58, 2019-03-31-04-39-58"
"2019-03-31-05-04-58, 2019-03-31-05-14-58"
"2019-03-31-05-44-58, 2019-03-31-05-44-58"
"2019-03-31-19-30-58, 2019-03-31-19-40-58"
我基本上想要:
"1,1"
"2,2"
"3,3"
"4,4"
代替
"1,1"
"1,2"
"1,3"
"1,4"
"2,1"
"2,2"
"2,3"
"2,4"
解决方案
使用 purrr 库中的“map2”将相当简单。
finalsortedlist <- map2(t1, t2, ~fn[between(fn, .x, .y)])
本质上,map2 将从 t1 和 t2 中获取第 n 个项目,并将它们分别作为 .x 和 .y 传递给您的函数。结果将是一个包含每次迭代结果的列表。
推荐阅读
- flyway - 这是 Flyway 用例吗
- github - 更改 github repo 所有权
- github - 如何通过openshift中的yaml文件使用webhook payhold url自动创建github触发器?
- node.js - 如何使用 google apis 向多个设备发送 FCM 推送通知?
- flutter - 当 Firestore 更改时 Streambuilder 不更新
- c# - AngularJS MVC WebApplication页面未加载
- ios - GAS 宏内的标签
- angularjs - 如何从 ng-repeat 只重命名一个字符串
- javascript - 操作导入文件的全局范围
- html - 引导导航栏 2 div 一个在另一个之下