今天遇到一个问题,比如有一堆基因名,genes <- c("ADAMTS19", "AHSG", "APOA1", "APOA2", "APOC3")
,我想挨个处理以后,把每个基因对应的结果放到一个新的变量里,而这个新的变量自动以该基因或相关的字符串命名。例如第一个就叫"gene_ADAMTS19"
。
在循环的时候,当然不能写for (gene in genes) {gene <- XXXX_function},这样只能留下最后一次循环的结果,前面的都会被覆盖掉,或者根本不能直接赋值。
思考这个问题最核心的部分在于,每个循环中的变量名都是不同的,赋值的结果怎样才能是变量?这个时候需要请出assign(x, value)
函数,可以把value
的值赋给x
;这个时候x
作为参数,就可以随意写了。就像这样:
for (gene in genes) {
gene_name <- paste("gene", gene, sep = "_") # 每次的变量名都含有当前的"gene"。
assign(gene_name, XXXX_function(gene, parameter2)) # 将XXXX_function的结果assign给当前的变量名。
}