2012-01-04 2 views
2

나는 여러 파일에서 XTS의 시계열을로드하고 하나의 XTS 매트릭스에 병합하려면 다음 R 코드를 가지고있는 방법R : 단일 블록에 여러 파일에서로드 XTS 시리즈

에 있습니까

load.files = function(dates, filenames) { 
    for(i in 1:length(dates)) { 
    # load and merge each xts block 
    ts.set = load.single.file(dates[i], filenames[i]) 
    if(i == 1) 
    ts.all = ts.set 
    else 
    ts.all = rbind(ts.all, ts.set) 
} 

return(ts.all) 

  1. 첫 번째 ts.set을 초기화하는 데 필요한 if/else 문을 사용하지 마십시오.
  2. for 루프를 피하십시오?

답변

3

저는 종종 이와 같은 구조를 사용하여 명시적인 루프 생성을 피합니다.

전략은 먼저 파일을 data.frames 목록으로 읽은 다음 rbind과 함께 그 목록의 요소를 단일 data.frame으로 읽는 것입니다. 아마도 당신의 상황에 똑같은 논리를 적용 할 수 있습니다.

filenames <- c("a.csv", "b.csv", "c.csv") 
l <- lapply(filenames, read.csv) 
do.call("rbind", l) 
+0

이것은 작동하는 것처럼 보이지만 lapply를 호출하면 이러한 경고 메시지가 표시됩니다. 무슨 뜻이에요? 내 버전에서는 l = lapply (dates, load.ets.trades, filenames)라는 추가 매개 변수를 사용합니다. 경고 메시지 : 1 : 파일 (파일, "rt") : 'description'인수의 첫 번째 요소 만 used 2 : 파일 (파일, "rt") : 'description'인수의 첫 번째 요소 만 사용됩니다. –

+1

파일 이름은 목록/벡터이지만 load.ets.trades는 단일 문자열을 필요로합니까? 파일 이름 [i]에 dates [i]를 사용할 때 _smell_이 잘못되었습니다. 대신 데이터 프레임/행렬에 두 개의 열로 표시하는 것이 더 강력합니다. (그런 다음() 또는 apply()를 사용하십시오. http://stackoverflow.com/questions/1699046/foreach-row-in-an-r-dataframe 참조) –

+2

@DarrenCook에 언급 된 바와 같이, 그 경고는 'load.ets.trades()'는'filenames' 벡터 전체에 전달되고 있습니다. 첫 번째 것만 반복해서 사용하며 그렇게하고 있음을 경고합니다. 내가 사용하고자하는 해결책은'mapply()'를 사용하는 것인데,이 상황을 위해서만 설계되었습니다. 당신의 호출은'l <- mapply (FUN = load.ets.trades, date = dates, filename = filename)'과 같은 형태로 보일 것입니다.'date'와'filename'는'load.ets . 이 문제가 귀하의 문제를 해결할 경우 저희에게 알려주십시오. –

관련 문제