简体   繁体   中英

Return multiple data frames from function R

I am trying to put together a function that will loop thru a given data frame in blocks and return a new data frame containing stuff calculated from the original. The length of x will be different each time and the actual problem will have more loops in the function. New-ish to R and have not been able to find anything helpful (I don't think using a list will help)

func<-function(x){
    tmp # need to declare this here?
    for (i in 1:dim(x)[1]){
        tmp[i]<-ave(x[i,]) # add things to it
    }
    return(tmp)
 }
 df<-cbind(rnorm(10),rnorm(10))
 means<-func(df)

This code does not work but I hope it gets across what I want to do. thanks!

Do you mean you want to loop through each row of df and return a data frame with the calculated values?

You may want to look in to the apply function:

df <- cbind(rnorm(10),rnorm(10))
# apply(df,1,FUN) does FUN(df[i,])
# e.g. mean of each row:
apply(df,1,mean)

For more complicated looping like performing some operation on a per-factor basis, I strongly recommend package plyr , and function ddply within. Quick example:

df <- data.frame( gender=c('M','M','F','F'), height=c(183,176,157,168) )
# find mean height *per gender*
ddply(df,.(gender), function(x) c(height=mean(x$height)))
# returns:
  gender height
1      F  162.5
2      M  179.5

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM