2011-10-14 2 views
3

안녕 나의 마음에 드는 코딩 전문가에 두 개의 파일을 통해, 루프,한 번

나는 R에서 한 번에 두 개의 파일을 통해 루프를 시도하고있다 : 하나의 '사건'파일을 IE와 다른 '제어'파일 , 그래프를 만들고 pdf로 덤프 한 다음 다른 두 세트의 파일을 가져 와서 같은 작업을 반복합니다. 나는 파일이 제어는 다음과 같이 인 경우이고 있는지를 나타내는 목록을 가지고 :

다음과 같이 재현 할 수있는 등
case control 
A01 G01 
A02 G02 
A06 G03 

과 ... : myList에 < - "data.frame (rbind (C (("A01", "G01"), c ("A02", "G02"), c ("A06", "G03"))) colname (mylist) < -c ('control', 'case')

나는 각각의 시간을 통해 루프에이 파일을 지정하는 방법을 찾을 수 없습니다. 파일 (많은 변수와 각 파일)입니다 : "/ 사용자/francy/데스크탑/cc_files_A01", ""/ 사용자/francy/데스크탑/cc_files_A02 ","/ 사용자/francy/데스크탑/cc_files_A06 ","/ 사용자/francy/데스크탑/cc_files_G01는 ","/ 사용자/francy은/데스크탑/cc_files_G02 ","/ 사용자/francy은/데스크탑/cc_files_G03 "케이스와 컨트롤의 각 세트의

, 나는이 일을하고 싶습니다 :

.

,536,913,632 :
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) 
} 

어떤 도움 (10)는 매우 감사합니다. 고맙습니다!

+0

어떻게 파일은 디렉토리에 구성되어 있습니다? 파일 이름에 몇 가지 패턴이 있습니까? 예 : case1.txt/control1.txt, case2.txt/control2.txt 등? – bnaul

+0

안녕하세요 bnaul, 불행히도 패턴이 없습니다 ... 문자와 숫자가 임의로 나타나는 것처럼 보입니다 ... – user971102

+0

많은 것들이 혼란스러워하고 있습니다. list.files (...)'라인, 어떤 파일에 대해 어떤 유형의 당신에게 정보를 제공하지 않습니다 - 당신이 경우 제어 파일의 목록이있는 경우'myFiles <의 목적은 무엇인가? 왜 이미 가지고있는 파일 목록을 반복하지 않는 것이 좋을까요? 또는 파일 이름이 단순히 12H.txt, 14C.txt 등이 아닌 문제 일 때 파일을 검사하여 해당 사례/컨트롤을 확인해야합니다. – bnaul

답변

2

왜 그냥 목록을 통해 루프에 파일의 쌍을 통과하지 :

이 "목록"은 data.frame lcc에있는 경우, 당신은 같은 일을 할 수 있을까?

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의 첫 번째 요소가 포함되어 있습니다. 첫 번째 요소는 길이 두 문자 벡터이므로 f[1]는 한 쌍의 파일명을 포함하고, f[2]는 제를 포함한다. 위의 코드의 인쇄물을 보면 알 수 있습니다.

+0

안녕하세요 gsk3, 내 문제는 agood 솔루션처럼 들리지만 ... f [1]은 파일 A와 B 파일 모두를 제공하고 첫 번째 파일 A를 선택하고 계산을 수행하는 방법은 무엇입니까? 하나, 그리고 파일 B를 조작? 무지 미안해 ... – user971102

+0

편집 설명. –

+0

고맙습니다. gsk3 !! 내가 마지막으로 한 가지 의심할만한 점은 ... 내가이 파일을 실행하면 처음 두 파일 만 제공하고, '파일'을 더 지정했다면 어떤 일이 벌어지고 있는지 알 수 있습니까? 매우 고맙습니다. : pdf (파일에 '그래프') (파일 있음) { 사례 <- read.table (파일 = f [2], sep = '\ t', 헤더 = F) (file = f [1], sep = '\ t', header = F) boxplot ### 및 기타 명령 ###} dev.off() – user971102

0

환자군과 대조군의 목록을 가정 것은 R 객체 (dataframe 또는 매트릭스)에이 mylist라고 :

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 ## 
} 
+0

타일러 감사합니다. 이 코드를 시도 할 때 오류가 발생합니다. 그러나 나는 그것을 이해하지 못하기 때문에 확신합니다. 전의. '[.default' (xj, i) : 잘못된 첨자 유형 목록에 오류가 발생했습니다. 그리고 스크립트를 두 데이터 프레임 '컨트롤'과 '사례'로 계속 사용하려고하면 다른 오류가 발생합니다. 하위 집합 데이터 프레임 ...), 당신은 내가 뭘 잘못하고 있니? 다시 감사합니다. – user971102

+0

'mylist'가 data.frame 또는 matrix 객체라고 가정합니다. 진정한 R'list' 타입이라면, 제대로 작동하기 위해서 마지막에 수정해야합니다. 질문에 예제 코드를 제공하지 않았기 때문에 우리가하는 일을 추측해야합니다. – Tyler

+0

죄송합니다 타일러, 나는 게시물을 편집하고 조금 더 명확 지금은 희망 ... 나는 아직도 당신이 제안한 코드가 나를 위해 일하지 않는 이유를 알아 내려고 노력하고있어. 나는이 오류가 발생 : "파일 (파일,"RT ") : 'description'인수의 첫 번째 요소 만 사용되었습니다. " – user971102

0
아마이 경우에 더 의미가 무엇

, 당신의 "목록에서 두 개의 파일 이름을 구축하고있다 "(data.frame?) 케이스와 컨트롤.

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... 
} 
+0

답장을 보내 주셔서 감사합니다. 사례와 컨트롤은 예측 가능한 접두사와 접미사 없이는 전혀 다른 이름을 가지고 있습니다 ... – user971102

+0

일단 파일 이름 목록을 얻으면 "14C.txt"로 끝나는 것을 쉽게 찾을 수 있습니다. 아니요 (그렇지 않다면'? grep'을 확인하십시오)? '붙여 넣기'트릭을 '트릭으로 끝나는 파일 찾기'로 바꾸십시오. –