如何解决将字符串连接为数据框子集的名称
R中有一个输入文件列表,它们是数据帧。
现在,我想根据其中一列中给出的基因对它们进行子集化。 我习惯于对每个样本重复执行所有操作,但是我希望能够使代码更流畅,更短,这给我带来了一些问题。
我以前是怎么做的:
GM04284 <- read.table("GM04284_methylation_results_hg37.txt",header = TRUE)
GM04284_HTT <- subset(GM04284[GM04284$target == "HTT",])
GM04284_FMR1 <- subset(GM04284[GM04284$target == "fmr1",])
我现在要怎么做:
input_files = list.files(pattern = "_methylation_results_hg37.txt")
for (file in input_files){
# Define sample and gene from input file
sample = strsplit(file,split = "_")[[1]][1]
# read input
data = read.table(file,header = T,na.strings = "NA")
# subset input into gene specific tables
paste(sample,"_HTT",sep = "") <- subset(data[data$target == "HTT",])
paste(sample,"_FMR1",sep = "") <- subset(data[data$target == "fmr1",])
}
子集部分是导致我出现问题的原因。 如何创建一个新的变量名称,使其看起来像paste(sample,“ _ HTT”,sep =“”)的输出,并可以用作新子集表的名称?
在此先感谢您的帮助。
解决方法
确定要为每个数据框创建新变量吗?如果以后要以相同的方式对待它们,最好使用更统一,组织更好的方法。
一种选择是将它们全部保留在列表中:
input_files = list.files(pattern = "_methylation_results_hg37.txt")
res_list <- list()
for (file in input_files){
# Define sample and gene from input file
sample = strsplit(file,split = "_")[[1]][1]
# read input
data = read.table(file,header = T,na.strings = "NA")
# subset input into gene specific tables
res_list[[paste0(sample,"_HTT")]] <- data[data$target == "HTT",]
res_list[[paste0(sample,"_FMR1")]] <- data[data$target == "fmr1",]
}
然后,您可以将它们作为此列表的成员来处理,例如res_list$GM04284
(或等效的res_list[['GM04284']]
)
在上面的答案中很容易提出要点。将每个数据框都包含在列表中确实会比较整齐。
不过,如果您确实想创建新的动态变量,则可以使用assign()
:
assign(paste0(sample,"_HTT"),subset(data[data$target == "HTT",]),envir = .GlobalEnv)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。