我在 R 中的分析有四个结果对象。 我想使用循环对它们进行相同的分析。我想制作一个通用脚本并使用名称的子字符串在我的文件上运行它。但是我不知道该怎么做。 我的对象的名称具有相同的名称,除了四个用于识别基因型的字符。
我想我可以使用类似于
bash
中的东西,我可以使用名称的子字符串进行循环,例如
for i in {7454620..7454643}; do
STAR --runThreadN 24 --readFilesIn ../surowe/ERR${i}_1.fastq.gz \\
../surowe/ERR${i}_2.fastq.gz --genomeDir ../../star-index --outSAMtype BAM SortedByCoordinate \\
--outFileNamePrefix ERR${i} --readFilesCommand zcat
done
我已经阅读了几页有关使用
lapply
和 for
循环的内容,但没有找到任何符合我需求的内容。
这几乎肯定是重复的,但您正在寻找
sprintf
(或 paste0
或 glue
)和 get()
和 assign()
的组合。概括一个表达式,如
plus.a554.regr.vs.ch <- res.a554.leaf.regr.vs.ch[which(res.a554.leaf.regr.vs.ch$padj < 0.05 &
res.a554.leaf.regr.vs.ch$log2FoldChange > 0),]
当您用不同的字符串替换
a554
时,您可以使用 get()
来获取基于字符串的变量,并使用 assign
来基于字符串设置它们的值,例如
v <- "a554"
recv_var <- sprintf("plus.%s.regr.vs.ch", v)
orig_var <- sprintf("res.%s.leaf.regr.vs.ch", v)
val <- with(orig_var, orig_var[padj < 0.05 & log2FoldChange > 0, ])
assign(recv_var, orig_var)
一些评论:
lapply()
(或 for
循环)轻松迭代列表(并生成结果列表)。val <-
作业中,我使用 with()
使代码更加紧凑/可读(即 with()
允许我写 padj
和 log2FoldChange
而不是 orig_var$padj
和 orig_var$log2FoldChange
)。如果您喜欢 tidyverse,您也可以使用 dplyr::filter()
来完成此任务。 (另外,which()
在这里是不必要的。)