使用用户定义的“for循环”函数构造数据框

时间:2015-03-12 08:07:57

标签: r function dataframe

我正在尝试根据用户定义的函数生成数据框。我的问题是在输出中只有第一行被填充。 以下是我正在使用的函数示例:

df <- data.frame(cs=rep(c("T1","T2","T3","T4"),each=16),yr=rep(c(1:4), times = 4, each = 4))
sp.df <- data.frame(matrix(sample.int(100, size = 20*64,replace=T), ncol = 20, nrow = 64))

myfunc<-function(X,  system, Title)
{
  for(i in 1:4){
    Col_T <- data.frame(matrix(NA, ncol = length(X), nrow = 4))
    Col_T[i,] <- colSums(X[which(df$yr==i & df$cs==system),])
    return (Col_T)}}

myfunc(X=sp.df, system="T1", Title="T1")

我欢迎任何解决此问题的建议。 非常感谢你。

1 个答案:

答案 0 :(得分:1)

该功能有两个问题:

  1. 您将所有Col_T覆盖NA作为for循环中的第一个语句。
  2. 你从for循环中的函数返回。
  3. 重写如下:

    myfunc <- function(X, system, Title ) {
        Col_T <- data.frame(matrix(NA, ncol=length(X), nrow=4 ));
        for (i in 1:4)
            Col_T[i,] <- colSums(X[which(df$yr==i & df$cs==system),]);
        return(Col_T);
    };