我有兴趣让我的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
我的想法:
更明确吗?
P.S。:我谷歌它可能是因为我不知道我找不到任何相关的主题,只是给我一个我可以搜索的想法,我想学习这个编程步骤。
答案 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
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) )