解释这段代码pb <- progress_bar$new(total = length(cancer_types)) for (i in cancer_types){ for (j in classes){ mi<-read.csv(str_c(dir,"\\tcga_data\\",i,"\\",j,"_normalized_mi.csv"),row.names = 1,check.names = F) rna<-read.csv(str_c(dir,"\\tcga_data\\",i,"\\",j,"_normalized_rna.csv"),row.names = 1, check.names = F) id<-rownames(mi) target<-rownames(rna) pair<-tidyr::crossing(id, target) pair<-cal_correlation(pair,mi,rna,pcc_filter) mi<-mi[rownames(mi)%in%unique(pair[,1]),] fwrite(mi,str_c(dir,"\\tcga_data\\",i,"\\",j,"_corr_validated_mi.csv"),sep = ',',row.names = T,quote = F) rna<-rna[rownames(rna)%in%unique(pair[,2]),] fwrite(rna,str_c(dir,"\\tcga_data\\",i,"\\",j,"_corr_validated_rna.csv"),sep = ',',row.names = T,quote = F) write.csv(pair,str_c(dir,"\\tcga_data\\",i,"\\",j,"_miRNA-RNA_pair.csv"),row.names=F,quote=F) } pb$tick() }
时间: 2023-09-17 11:14:39 浏览: 165
这段代码是一个嵌套循环,用于处理多个癌症类型和类别的数据。
首先,通过 `progress_bar$new(total = length(cancer_types))` 创建一个进度条对象 `pb`,总共需要处理的次数等于 `cancer_types` 的长度。
然后,使用两个嵌套的 `for` 循环遍历 `cancer_types` 和 `classes`。在每次循环中,执行以下步骤:
1. 使用 `read.csv` 函数读取指定路径下的文件,文件路径由变量 `dir`、`i` 和 `j` 构成。
2. 将读取的数据分别赋值给变量 `mi` 和 `rna`。
3. 获取 `mi` 和 `rna` 数据的行名称,并将其分别赋值给变量 `id` 和 `target`。
4. 使用 `tidyr::crossing` 函数获取 `id` 和 `target` 的所有组合,并赋值给变量 `pair`。
5. 调用自定义函数 `cal_correlation` 处理 `pair`、`mi`、`rna` 和 `pcc_filter`,得到筛选后的结果,并重新赋值给变量 `pair`。
6. 根据筛选后的结果,从 `mi` 中保留与 `pair[,1]` 中唯一值匹配的行,并将结果写入指定路径下的文件。
7. 根据筛选后的结果,从 `rna` 中保留与 `pair[,2]` 中唯一值匹配的行,并将结果写入指定路径下的文件。
8. 将 `pair` 写入指定路径下的文件,文件名为 `"_miRNA-RNA_pair.csv"`。
每执行完一次内层循环,调用 `pb$tick()` 方法更新进度条的状态。
整个代码的目的是读取文件、处理数据、筛选结果,并将处理后的数据和结果写入指定的文件中。
阅读全文