2013-01-22 222 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)'。 –