2014-03-27 2 views
0

for 루프에 read.table을 사용하고 한 번에 각 데이터에 대해 분석을 수행하고 결과를 행렬에 씁니다.for 루프에서 read.table을 어떻게 사용합니까?

for(i in 1:8) { 
    assign(paste("AA.BB.CC.P", i, sep="") 
    data <- read.table(paste(i, "DD", sep=".")) 

a <- data$V7 
b <- data$V12 
c <- data$V13 
d <- data$V15 

function(a,b,c,d) 
    } 

나는이 오류를 얻을 : 파일 이름은 내가이 시도 등 패턴 AA.BB.CC.P1.DD, AA.BB.CC.P2.DD,

다음은이

Error in file(file, "rt") : cannot open the connection In addition: Warning message: In file(file, "rt") : cannot open file '1.DD': No such file or directory

+0

귀하의 코드는'데이터 <존재하지 않는 파일을 읽으려고한다 - read.table (붙여 넣기 (I, "DD"를 9 월 =) ".")', 따라서'1.DD , 2.DD, ... '정말로 그 파일 이름을 읽고 싶습니까? – smci

+0

@Jaap. 아니요, 답장을 고려하면 파일 이름을 가져 오지만 'data $ V7'등은 아닙니다. – user2162153

답변

1

귀하의 코드 횡설수설입니다 : 당신은 여전히이 문제가 파일과 실제로 작업 디렉토리 의 경로를 확인해야 ("() getwd의"실제로 WD를 확인하기 위해 사용) 예를 들어 을 .csv로. 여기서 for 루프를 사용하지 마십시오. 그것은 하나의 디렉토리에있는 모든 파일을 넣고 같은 것을 할 가장 쉬운 것 : 이렇게하면 객체를 많이보다 작업하기가 훨씬 쉽다 data.frames와 좋은 목록을 제공

ff <- list.files(path="<add your dir path here>", full.names=TRUE) 
#use the pattern argument, if you have files in the directory, 
# which you don't want to read in 

myfilelist <- lapply(ff, read.table) 
names(myfilelist) <- list.files(path="<add your dir path here>", full.names=FALSE) 

귀하의 작업 공간.

+0

대단히 고마워요! – user2162153

+0

각 파일의 헤더를 어떻게 정의합니까? 나는 그것을'read.table'에 전달하려고 시도하지만 작동하지 않습니다. – user2162153

2

을겠습니까 당신을 위해 그 일?

for(i in 1:8) { 

    data <- read.table(paste0("AA.BB.CC.P",i,".", "DD")) 

      a <- data$V7 
      b <- data$V12 
      c <- data$V13 
      d <- data$V15 

      function(a,b,c,d) 
} 
+0

감사합니다. 그것은 기능의 목적을 위해 한 번에 각 파일을 읽지 않는 것 같습니다. 그것은'$ V7 : $ 연산자의 오류가 원자 벡터에 유효하지 않습니다. '라고 말합니다 – user2162153

1
for(i in 1:8) { 

    data <- read.table(paste("AA.BB.CC.P",i,".DD")) 

      a <- data$V7 
      b <- data$V12 
      c <- data$V13 
      d <- data$V15 

      function(a,b,c,d) 
} 

코드에서 문제 (난 당신이 function(a,b,c,d)와 함께 무엇을하고 있는지 잘 모르겠어요)

data <- read.table(paste(i, "DD", sep=".")) 

와 데이터의 소스는 "i.DD"이고이었다 "AA.BB.CC.Pi, DD"가 아닙니다 ... 당신도 읽을 파일 형식을 정의해야합니까?

+0

고마워요! 이제는 파일 이름을 올바르게 가져 왔지만'data $ V7' 등을 받아들이지 않습니다. – user2162153

+0

데이터의 헤더를 확인해야합니다. colnames (data) 을 사용하고 해당 필드를 사용하십시오. – ntrax

+0

개별 파일에는 헤더가 없습니다. 데이터를 시도 – user2162153

0

이 답변은 Roland의 답변에 따라 작성되었습니다.

파일의 항목을 반복하고 테이블로 읽으려면 Roland의 코드를 사용할 수 있습니다. read.table 함수를 lapply에 전달합니다.

문제는 기본 이외의 매개 변수를 read.table 함수에 전달할 수 없다는 것입니다.

아래의 코드는 header = False 및 sep = ','로 설정하는 함수를 만듭니다. 그러나이를 변경하고 자신의 함수를 사용자 정의 할 수 있습니다 (user2162153의 질문은 해결됨).

#Building up on Roland's answer, you can pass a personalized reader function. First define your function and than use his codes. 

Personalized_Reader <- function(lambda){ 
read.table(lambda, header = FALSE ,sep = ',')} 


# Personalize your arguments on the read.table function 

ff <- list.files(path="<add your dir path here>", full.names=TRUE) 
#use the pattern argument, if you have files in the directory, which you don't want to read in 

myfilelist <- lapply(ff, Personalized_Reader) 

names(myfilelist) <- list.files(path="<add your dir path here>", full.names=FALSE) 

`

+1

답변을 설명해 주시겠습니까? 코드 블록은 항상 더 많은 유익한 정보를 제공합니다. –