自动化许多具有不同值的基因的脚本

时间:2016-05-12 06:48:51

标签: r bioinformatics

我有兴趣让我的R脚本自动为另一组参数工作。例如:

           gene_name  start_x   end_y 
   file1 -> gene1      100       200
   file2->  gene2      150       270

我的脚本做的很简单,仅用于学习目的。它应该获取有关gene1的信息并找到一个总和,写入文件;然后它应该获取下一个gene2的信息,找到sum并将其写入一个新文件等,并且让我说我想根据基因名称保存文件名:

   file_gene1.txt     # this file holds sum of start_x +end_y for gene1
   file_gene2.txt     # this file holds sum of start_x +end_y for gene2

等其他700个基因(显然需要手动执行以获取file1,编写文件名并将开始和结束值插入已存在的脚本)

我想这个想法很清楚,我从来没有做过这类事情,我想这很简单,但如果有人能告诉我这个过程的正确定义,我会很感激,所以我可以在线搜索和学习这样做。

PS:我认为在Python中我只会列出一些基因和相关的x / y值,循环并选择所需信息,但我仍然不知道如何将基因名称自动保存为文件名。 / p>

修改

我必须提供有关基因位置的信息,因此开始和结束,分别是X和Y.

x=100    # assign x to a value of a related gene
y=150    # assign y to a value of a related gene


a=tbl[which(tbl[,'middle']>=x & tbl[,'middle']<y),]   # for each new gene this info is changing accoringly

write.table( a, file= '   gene1.txt' )     # here I would need changing file name

我的想法:

  1. 可能是我需要生成一个文件,其中包含所有700个基因名称以及相关的X和Y值。
  2. 然后我读了这个文件的第一行并将其提供给我的脚本(如果是变量a,x和y)
  3. 然后我的计算结束了我将结果写入文件并保留一个基因名称,用于生成此结果。
  4. 更明确吗?

    P.S。:我谷歌它可能是因为我不知道我找不到任何相关的主题,只是给我一个我可以搜索的想法,我想学习这个编程步骤。

2 个答案:

答案 0 :(得分:1)

我想你正在寻找阅读文件夹中存在的所有文件(假设所有基因文件都使用旧脚本写在一个文件夹中)。在这种情况下,您可以使用以下内容:

directory <- "C://User//Downloads//R//data"
file <- list.files(directory, full.names = TRUE)

然后使用file[i]访问文件名并执行所需操作(命名文件paste("gene", file[i], sep = "_")或将其读取read.csv(file[i]))

答案 1 :(得分:0)

我会将你的问题分成两部分。 (下面提供的可重复示例的样本数据)

library(data.table) # v1.9.7 (devel version)
# go here for install instructions
# https://github.com/Rdatatable/data.table/wiki/Installation

1st:通过基因

将您的功能应用于您的数据
  output <- dt[ , .( f1 = sum(start_x, end_y),
                     f2 =  start_x - end_y ,
                     f3 =  start_x * end_y ,
                     f7 = start_x / end_y),
                by=.(gene)]

第二步:按基因拆分数据框并将其保存在单独的文件中

  output[,fwrite(.SD,file=sprintf("%s.csv", unique(gene))),
         by=.(gene)]

如果您愿意,可以将多个文件绑定到一个数据框中:

# Get a List of all `.csv` files in your folder
  filenames <- list.files("C:/your/folder", pattern="*.csv", full.names=TRUE)

 # Load and bind all data sets
   data <- rbindlist(lapply(filenames,fread))

PS。请注意,截至今天(2016年5月12日),fwrite仍处于data.table的开发版本中

可重复示例的数据:

dt <- data.table( gene = c('id1','id2','id3','id4','id5','id6','id7','id8','id9','id10'),
                  start_x  = c(1:10),
                  end_y = c(20:29) )