2013-01-05 2 views
0

누구든지이 문제를 해결할 수 있도록 도와 줄 수 있습니까? 나는 @Arun에서 제공하는 다음 코드 lapply을 사용하고 있습니다 :lapply에서 다른 길이의 출력 추출

out <- lapply(1:length(f1), function(f.idx) { 
    df1 <- read.delim(f1[f.idx], header = T) 
    df2 <- read.delim(f2[f.idx], header = T) 
    df3 <- read.delim(f3[f.idx], header = T) 

    idx.v <- get_idx(df1) 
    result <- get_result(idx.v, df2, df3) 

}) 

지금, out 110 개 파일의 목록입니다. 이 출력 파일의 길이가 다르므로 as.data.frame(do.call(rbind, out))을 사용할 수 없습니다. 각 파일을 루프와 같은 방식으로 별도의 파일로 저장하거나 수동으로 수행해야합니까 (예 : out[1], out[2] 등).

+0

@ Arun 네, 맞습니다. – Gongon

+0

''plyr ::: rbind.fill'이 당신이 쫓고있는 것이 아닌가 궁금합니다. –

+0

@ RomanLuštrik, 각 파일은 개별 종을 나타내며 길이 (즉, 수 또는 관측치)가 다릅니다. 하나의 데이터 프레임을 만들려고하면 각 종의 관측 수를 구별하기가 어렵습니다. 추가 분석을 위해 각 종의 관측 수를 정확히 알아야합니다. 필자가 목록에서이 파일들을 어떻게 개별 파일로 저장하는 것이 훨씬 쉽습니다. 제안 해 주셔서 감사합니다. – Gongon

답변

2

do.call(rbind...님께 서 얻으려고하는 것은 무엇입니까? 이는 목록에서 데이터를 결합하기위한 것입니다. 나는 왜 당신이 "as.data.frame"을 붙일 지 모르겠습니다. 동일한 열을 가진 listdata.frame 일 경우 행 수가 다르며 본질적으로 서로를 "쌓아"넣으려는 경우 다음을 사용하여 큰 값을 얻으십시오 data.frame 그리고 그 하나의 객체를 저장합니다

당신이 "밖으로"라는 이름의 목록에 다른 data.frame의를 가지고 작업 디렉토리에서 개별 파일로 data.frame의를 저장하려는 것처럼 소리
do.call(rbind, out) 

. 목록에서 data.frame의 이름이 고유하지 않으면 다른 접근을해야 할 수도 있습니다

lapply(names(out), 
     function(x) write.csv(out[[x]], 
          file = paste(x, ".csv", sep = ""))) 

: 그런 경우, 같은 것을보십시오.

이전의 관련 질문에 링크하면 누가 코드를 공유했는지 간단히 언급하는 것보다 낫습니다.

+0

마찬가지로 다른 데이터가 있습니다. 프레임을 "out"이라는 목록에 추가 했으므로 제안을 시도했지만 작동하지 않고 콘솔의 "list()"와 작업 디렉토리의 파일을 제공하지 않았습니다. 나는 그것이 data.frames의 이름이 유일하지 않기 때문에 그것이라고 생각한다. – Gongon

관련 문제