2013-01-22 4 views
2

루프에서 R을 포함하는 함수를 만들려고 할 때 문제가 발생합니다. 루프는 잘 작동하지만 함수의 본문에 넣으면 출력이 더 이상 쓰이지 않습니다. 나는이함수에서 결과 반환 R

같은 함수를 만들려고 할 때

df1<-data.frame(a=sample(1:50,10),b=sample(1:50,10),c=sample(1:50,10)) 

내가 내 결과를 저장하는 벡터 및 일부 기능

result <- vector("list",10) 

    for (i in 1:10) 
    { 
     result[[i]] <- df1*i 
    } 

와 루프를 만들 :

그래서 내 데이터를 제공

# make the loop a function 
    result2 <- vector("list",10) 

    loop.function<- 
     function(x,a,b){ 
     for (i in a:b) 
     { 
     result2[[i]] <- x*i 
     } 
    } 
    loop.function(df1,1,10) 

"result2"에 데이터가 없습니다. 그래서 구문에 몇 가지 기본적인 문제가 있다고 생각합니다. 누구든지 나를 도울 수 있습니까?

+0

하나! 클래식 초보자 트랩! – agstudy

답변

5

함수가 만든 목록을 반환하지 않습니다. 당신은 return 명령을 추가해야합니다 그런데

result2 <- vector("list",10) 

loop.function<- 
    function(x,a,b){ 
    for (i in a:b) 
    { 
    result2[[i]] <- x*i 
    } 
    return(result2) # added this row 
} 

:이 기능의 짧은 버전 lapply로 생성 될 수있다 :이 재미 질문에 대한

myfun <- function(x, a = 1, b) { 
    lapply(seq(a, b), "*", x) 
} 
+0

운동. 충고에 감사드립니다 !! – Joschi

+0

일단 성능에 대해 걱정하면 결과 객체 주위에'result()'를 놓으면 코드가 좀 더 빨라질 수 있습니다. 그냥 내 두 센트. –

+0

생각보다 쉽습니다 :'as.list (x * a : b)'. –