2014-09-29 2 views
0

안녕하세요 저는 파일을 읽고 시계열을 반환하는 함수를 작성하고 있습니다. 그런 다음이 시계열을 변수에 할당해야합니다. 제가 적용하여 데이터 1, 데이터 2, 데이터 2의 이름으로 변수를 초기화하고 싶습니다 간결한 방법으로이 작업을 수행하고 위의 코드 조각에서 R.함수 프로그래밍을 사용하여 R에서 변수를 동적으로 초기화

# read a file and returns the 
readFile <- function( fileName , filePath){ 
    fullPath <- paste(filePath, filename, sep=''); 
    f <- as.xts(read.zoo(fullPath, format='%d/%m/%Y', 
        FUN=as.Date, header=TRUE, sep='\t')); 
    return(na.locf(f)); 
} 

filePath <- 'C://data/' 
# real list of files is a lot longer 
fnames <- c('d1.csv', 'd2.csv','d3.csv'); 
varnames <- c('data1', 'data2', 'data3'); 

의 함수형 프로그래밍 기능을 활용하기 위해 노력하고있어 readfile 함수는 fnames와 filepath (항상 상수 임).

같은 뭔가 : 물론

lapply(fnames, readFile, filePath); 

위 나던 일, 어느 쪽도 아니 그것은 내가 달성하기 위해 노력하고있어이 동적 변수 할당을하지 않습니다. 저를 인도 할 수있는 R 기능 프로그래밍 전문가가 있습니까? 지정된 이름을 가진 많은 변수를 구축

+1

[가능한 빨리 변수의 이름을 지정하는 방법?] (http://stackoverflow.com/questions/2679193/how-to-name-variables-on-the-fly-in-r) – shadow

+0

고마워 그림자 - 네, 부분적으로 중복되었지만 FP를 처음 접한 이래로 많은 변수에 대해 이것을 달성하는 데 lapply를 어떻게 사용할 수 있는지 이해하려고합니다. – user1480926

+1

정말하고 싶다면 (링크 된 질문에있는 주석을 읽으십시오 :하지 마세요), mapply (FUN = assign, x = varnames, value = data, MoreArgs = list (envir = .GlobalEnv))' – shadow

답변

2

가 SO에 다소 일반적인 요청입니다

data1 <- readFile( 'd1.csv', filepath); 
data2 <- readFile( 'd2.csv', filepath); 

이궁과 확실히 assign 기능을 관리 할 수 ​​있지만 :

이의 작업 버전과 같을 것 여러 변수 대신 목록을 작성하면 데이터를보다 쉽게 ​​처리 할 수 ​​있습니다. 그런 다음 lst[["data1"]], lst[["data2"]]lst[["data3"]] 각 CSV 파일에서 결과에 액세스 할 수

lst <- setNames(lapply(fnames, readFile, filePath), varnames) 

: 예를 들어, 모든 결과에 읽을 수와 함께라는 이름의 목록을 얻을 수 있습니다.

이 방법의 이점은 이제 모든 변수를 반복하거나 변수 이름을 반복하고 get 함수를 사용하는 대신 lapply(lst, ...)을 사용하여 모든 시계열 변수에 대해 연산을 수행 할 수 있다는 것입니다.

+0

감사합니다. 지금 시도하고 있습니다. – user1480926

+0

setnames (lapply (fnames, readFile, filePath), varnames)의 오류 : x가 data.table 또는 data.frame이 아닙니다. – user1480926

+0

@ user1480926'setnames'가 아니라'setNames'입니다. – josliber

관련 문제