2017-04-13 2 views
0

루프 번호가있는 데이터 프레임을 추가하는 동안이 루프를 반복 할 때마다 데이터 프레임을 저장하려고합니다. 그래서, 나는 5 개의 데이터 프레임을 모두 다른 이름으로 남겨 둘 것입니다.매 반복마다 데이터 프레임 저장 [r]

실제 코드에서는 모든 데이터 프레임이 달라 지겠지만 간단히하기 위해 여기에 하나의 데이터 프레임 만 표시했습니다.

아래 테스트 코드를 제공했습니다. 생성

testFunction <- function() { 

for (i in 1:5) { 


      x <- data.frame(c(1:10), c(1,2,3,4,5,6,7,8,9,10), c(10:19)) 

      name <- paste("name", i, sep = "_") 
      name <- x 

      } 
} 

예제 데이터 프레임의 이름은 다음과 같습니다

testFunction() 

name_1 
name_2 
name_3 
name_4 
name_5 

그러나, 난 단지 루프가 완료되면 저장 최종 데이터 프레임 "NAME_5"를 얻고있다. 내 문제는 루프에서 벗어나지 않고 데이터 프레임의 i 번째 버전을 저장하는 방법을 모른다는 것입니다.

이 문제를 해결할 수있는 방법에 대한 제안 사항이 있으십니까?

***** 편집 *****

내가 가진 내 assign()가 작동하지 않는 이유를 할 수있는 기능, 내부 루프. 나는 이것을 보여주기 위해 위의 예제를 추가했다. 루프 내부

답변

1

assign()를 사용

for (i in 1:5) {  
    x <- data.frame(c(1:10), c(1,2,3,4,5,6,7,8,9,10), c(10:19))  
    assign(paste("name", i, sep = "_") , x)  
} 

편집 : 지금 함수에서이 작업을 수행 할로서

, 당신이에 할당 할 수있는 환경을 지정해야합니다.

testFunction <- function() { 
    for (i in 1:5) {   
     x <- data.frame(c(1:10), c(1,2,3,4,5,6,7,8,9,10), c(10:19))   
     assign(paste("name", i, sep = "_") , x , envir = globalenv())   
    }  
} 

는 바깥 환경을 편집하는 함수를 작성하는 것이 좋습니다가 아님을 경고하십시오 : 당신이 지구 환경을 원하는 생각한다. 데이터 프레임의 이름이 지정된 목록을 반환하는 것이 좋습니다. like :

testFunction_2 <- function() {  
    out_list <- vector(mode = "list", length = 5)  
    for (i in 1:5) {   
    x <- data.frame(c(1:10), c(1,2,3,4,5,6,7,8,9,10), c(10:19))   
    out_list[[i]] <- x 
    names(out_list)[i] <- paste("name", i, sep = "_")  
    } 
    return(out_list) 
} 
+0

흠이 작동하지 않습니다. 내가 갖고있는 코드와 더 흡사하게 코드를 추가 할 것입니다. – Chef1075

+0

현재 어떤 점에서 효과가 있습니까? 원래의 문제에 도움이되지 않는다는 뜻입니까? –

+0

'assign'도 함수에 싸여있을 때 작동하지 않는다고 생각합니다. – Chef1075