R语言中如何实现向量对应元素配对循环(避免全交互输出)
嘿,这个问题很常见——你当前的嵌套循环会遍历两个向量的所有两两组合,所以才会输出4个结果。要实现一一配对的需求,只需要调整循环逻辑,让两个向量的对应位置元素一起处理就好啦!
方法1:单循环遍历索引
因为你的两个向量长度相同(都是2),我们可以遍历它们的索引,每次取对应位置的文件进行处理:
metaxcan <- c("foo1.csv", "foo2.csv") predix_asso <- c("soo1.csv", "soo2.csv") # 遍历对应索引,实现一一配对 for (idx in seq_along(metaxcan)) { # 取出当前索引对应的两个文件 pgc_file <- metaxcan[idx] asso_file <- predix_asso[idx] PGC <- read.csv(pgc_file, header = TRUE, sep = ",") asociacion <- read.table(asso_file, header = TRUE, sep = "") PGC_predix <- merge(PGC, asociacion, by = "gene") ngenes <- nrow(PGC_predix) # 注意:原代码里的PGC_predix_1是笔误,会导致报错哦 print(ngenes) }
这个循环会执行2次:第一次处理foo1.csv + soo1.csv,第二次处理foo2.csv + soo2.csv,刚好输出你需要的2个结果。
方法2:用mapply实现向量化处理
如果你更喜欢R的向量化风格,也可以用mapply来简化代码——它会自动把两个向量的对应元素传入自定义函数:
metaxcan <- c("foo1.csv", "foo2.csv") predix_asso <- c("soo1.csv", "soo2.csv") # 定义一个处理单对文件的函数 get_merged_row_count <- function(pgc_file, asso_file) { PGC <- read.csv(pgc_file, header = TRUE, sep = ",") asociacion <- read.table(asso_file, header = TRUE, sep = "") merged_data <- merge(PGC, asociacion, by = "gene") nrow(merged_data) } # 用mapply对应配对调用函数 result <- mapply(get_merged_row_count, metaxcan, predix_asso) print(result)
运行后result会是一个包含两个数值的向量,分别对应两对文件合并后的行数。
内容的提问来源于stack exchange,提问作者Julio Rodríguez
相关产品推荐
相关产品推荐

