我有一个以这种方式命名的文件列表:
Myexpdate1_R1.txt
Myexpdate1_R2.txt
Myexpdate1_R3.txt
Myexpdate2_R1.txt
Myexpdate2_R2.txt
Myexpdate2_R3.txt
我如何要求R仅为可以进行三次重复的实验而不是其他实验运行管道?换句话说,如果案例如下:
Myexpdate1_R2.txt
Myexpdate1_R3.txt
Myexpdate2_R1.txt
Myexpdate2_R2.txt
Myexpdate2_R3.txt
代码不会针对Myexpdate1运行,因为Myexpdate1_R1.txt不可用,但它将针对Myexpdate1_R2.txt运行,因为所有三个重复都可用。我尝试将包含模式list.files()
的{{1}}文件的长度除以3,以便在它返回一个整数时运行而不是以其他方式运行但不幸的是我在通过正确识别整数时遇到了麻烦R.
提前致谢
答案 0 :(得分:1)
假设您从文件名列表flist
开始,
这应该给你一个d.f.如果您在一个实验中错过“R”,则execute
列设置为0
,否则为1
。例如:
flist <- c("Myexpdate1_R1.txt", "Myexpdate1_R2.txt", "Myexpdate1_R3.txt",
"Myexpdate2_R1.txt", "Myexpdate2_R2.txt")
library(dplyr)
library(stringr)
library(tibble)
flist <- c("Myexpdate1_R1.txt", "Myexpdate1_R2.txt", "Myexpdate1_R3.txt",
"Myexpdate2_R1.txt", "Myexpdate2_R2.txt")
exec <- flist %>%
str_split_fixed("_",2) %>%
as_tibble() %>%
mutate(replicas = str_split_fixed(V2, ".txt",2)[,1]) %>%
group_by(V1) %>%
dplyr::summarise(execute = ifelse (n() == 3, 1, 0))
> exec
# A tibble: 2 × 2
Experiment execute
<chr> <dbl>
1 Myexpdate1 1
2 Myexpdate2 0
然后,您可以使用exec
来决定是否运行模拟。例如,使用简单的for
循环:
names(exec)[1] <- "Experiment"
for (exp in seq(along = exec$Experiment)){
if (exec[exp,]$execute == 1){
message("Experiment:", exec[exp,]$Experiment,"--> OK, RUN")
print("DOING SOMETHING")
} else{
message("Experiment:", exec[exp,]$Experiment,"--> FAIL")
print("DOING NOTHING")
}
}
实验:Myexpdate1 - &GT;好的,跑步 “做某事”
实验:Myexpdate2 - &GT; FAIL
“无所事事”