2013-02-26 4 views
1

내가 편집 한 폴더루프는 이에 따라 --r

의 모든 exsiting 기차 .csv 파일에 대한 테스트 results.csv 파일의 corssproduct을 얻을 수있는 스크립트가 - 일부 수정은

mytest <- function(data) { 
data01 <- as.matrix(read.csv(file = "test/test-results.csv", sep = ",", header=FALSE)) 
data02 <- as.matrix(read.csv(file = data, sep = ",", header=FALSE)) 
test <- list() 
test01<- list() 
test02<- list() 
i<- 1 
while (i <= 25){ 
    test01[[i]] <- c(data01[i, ]) 
    test02[[i]] <- c(data02[i, ]) 
    test[[i]]<- crossprod(test01[[i]],test02[[i]]) 
    i <- i+1 
} 
return(mytest) 
} 
result <- lapply(list.files(pattern='^tain.*\\.csv', recursive=TRUE, full.names = TRUE),test) 
for (i in seq(length(result))) { 
write.csv(do.call(cbind,result),'result.csv', row.names = FALSE) 
} 

해당 폴더의 모든 동일한 스크립트를 적용하고 resu를 반환 할 수 있다면 내가 지금하는 스크립트를 만들려면

Main|experiment 01|test|test-results.csv, train01.csv, train02.csv, train03.csv 
Main|experiment 02|test|test-results.csv, train01.csv, train02.csv 

동일한 구조와 몇 폴더가 추가 lts (예 : results-experiment01.csv) 대신 그들에게이

답변

0

는 당신이 같은 (문자 벡터로 dirlist을 파일 목록을 가져 recursive = TRUE와 그냥 일반 dir 또는 list.files 전화로 말할 수 R에 ... 끔찍한 새 보이는 경우 100 배

미안 적용 당신은

> csvfiles <- dirlist[grepl('.*(experiment [0-9]+)/test/.*\\.csv', dirlist)] 
> csvfiles 
[1] "Main/experiment 01/test/a.csv" "Main/experiment 02/test/b.csv" 
를 다음과 같이 정규 표현식을 사용하여이 벡터를 부분 집합 수

> dirlist 
[1] "Main/experiment 01/test/a.csv" "Main/experiment 02/test/b.csv" "Main/experiment 02/test/d.txt" "Main/experiment 02/dummy/a.csv" 
[5] "temp1.csv"      "Main/temp2.csv" 

아래의 예)

그러면 regex를 사용하여 결과 이름을 다시 가져올 수 있습니다.

> resultsnames <- paste('result_', gsub('.*(experiment [0-9]+)/test/.*\\.csv','\\1', csvfiles), sep="") 
> resultsnames 
[1] "result_experiment 01" "result_experiment 02" 
+0

@ V-V 여기에서 달성하려는 것은 무엇입니까? 코드에 오류가 있습니다. '시험 '이란 무엇입니까? 'files'리스트는 무엇을 위해 생성 되었습니까? 루프 내부에서 무엇을하려고합니까? –

+0

자세한 내용은 위의 설명대로 --- 세부 사항 편집 –

관련 문제