2013-01-22 215 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

+1了這個有趣的問題!經典初學者陷阱!編制了 – 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)'。 –