您好我最喜欢的编码专家,
我试图在R中一次循环两个文件:即取一个'case'文件和另一个'control'文件,创建一个图并将其转储成pdf,然后再取另一组2个文件做相同等等。我有一个列表,指出哪个文件是一个案例,哪个是控件,如下所示:
case control
A01 G01
A02 G02
A06 G03
等......可以像这样再现: mylist< - data.frame(rbind(c(“A01”,“G01”),c(“A02”,“G02”),c(“A06”,“G03”))) colnames(mylist)< - c('control','case')
我找不到一种方法来指定每次循环哪两个文件。 该文件(每个文件包含许多变量)是:“/ Users / francy / Desktop / cc_files_A01”,“”/ Users / francy / Desktop / cc_files_A02“,”/ Users / francy / Desktop / cc_files_A06“,”/ Users / francy / Desktop / cc_files_G01“,”/ Users / francy / Desktop / cc_files_G02“,”/ Users / francy / Desktop / cc_files_G03“
对于每组案例和控制,我想这样做:
case<- read.table(file="/Users/francy/Desktop/case_files_A01.txt", sep = '\t', header = F)
case <- case[,c(1,2,19,20)]
colnames(case)<- c("ID", "fname", "lname", "Position")
control<- read.table(file="/Users/francy/Desktop/case_files_G01.txt", sep = '\t', header = F)
control <- control[,c(1,2,19,20)]
colnames(control)<- c("ID", "fname", "lname", "Position")
#t-test Position:
test<- t.test(case[20],control[20])
p.value= round(test$p.value, digits=3)
mean_case= round(mean(case[20], na.rm=T), digits=2)
mean_control= round(mean(control[20], na.rm=T), digits=2)
boxplot(c(case[20], control[20]), names=c(paste("case", "mean", mean_case, sep=":"),paste("control", "mean", mean_control, sep=":")))
想要创建包含所有箱图的pdf文件。
这就是我现在所拥有的:
myFiles <- list.files(path= "/mypath/", pattern=".txt")
pdf('/home/graph.pdf')
for (x in myFiles) {
control <- read.table(file = myFiles[x], sep = '\t', header = F)
## How do I specify that is the other file here, and which file it is?
case <- read.table(file = myFiles[x], sep = '\t', header = F)
}
非常感谢任何帮助。谢谢!
答案 0 :(得分:2)
为什么不通过列表将文件对传递给循环?
files <- list(
c("fileA","fileB"),
c("fileC","fileD")
)
for( f in files ) {
cat("~~~~~~~~\n")
cat("f[1] is",f[1],"~ f[2] is",f[2],"\n")
}
第一次循环运行时,f
包含列表files
的第一个元素。由于第一个元素是长度为2的字符向量,f[1]
包含该对的第一个文件名,f[2]
包含第二个。请参阅上述代码的打印输出,希望能够清楚说明。
答案 1 :(得分:0)
假设您的案例和控件列表位于名为mylist
的R对象(数据框或矩阵)中:
for (x in seq_along(nrow(mylist)) {
case <- read.table(file = paste("/my/path/", mylist[x, "case"], ".txt", sep = ""),
sep = "\t", header = F)
control <- read.table(file = paste("/my/path/", mylist[x, "control"], ".txt", sep = ""),
sep = "\t", header = F)
## your code here ##
}
答案 2 :(得分:0)
在这种情况下,更有意义的是,从案例和控件的“列表”(data.frame?)中构建两个文件名。
如果data.frame lcc
中存在此“列表”,您可以执行以下操作:
for(i in seq(nrow(lcc)))
{
currentcase<-lcc$case[i]
currentcontrol<-lcc$control[i]
currentcasefilename<-paste("someprefix_", currentcase, "_somepostfix.txt")
currentcontrolfilename<-paste("someprefix_", currentcontrol, "_somepostfix.txt")
#now open and process both files...
}