R函数内循环

时间:2018-11-07 12:14:22

标签: r function for-loop dataframe

我是堆栈溢出和R的新手,对编码并不真正熟悉。特别是循环或?help函数中的某些解释我很难理解。我有一些问题,包括“ for”循环到函数中。我认为这是一个我似乎不太了解的小错误,示例如下所示。感谢您的帮助。

我有一个看起来像这样的数据框(TNmg):

head(TNmg)
  Year               Taxon Cover Value
1 2012 Azolla filiculoides     1 12.20
2 2009 Azolla filiculoides     1 17.80
3 2012 Azolla filiculoides     2  3.85
4 2008 Azolla filiculoides     1  3.90
5 2008 Azolla filiculoides     1  4.50
6 2009 Azolla filiculoides     1 16.90

我还有一个简短的代码(请参阅下文),如果我按步骤1、2和3的顺序分别执行,并给出所需的输出,则可以正常工作,请参见下面的resComCP。

 # 1. create empty data frame
            resComCP <- as.data.frame(matrix(0, 1, 0))

 # 2. filter every group and execute a function on every group and add to the data frame
            for(i in unique(TNmg$Taxon)){
              A <- as.data.frame((filter(TNmg, Taxon == i)))
              B <- cusumq(x, x$Value, x$Cover)
              resComCP[i] <- B
              }

 # 3. transpose the dataframe from wide to long format and give the first column a name
            resComCP <- as.data.frame(t(resComCP))
            colnames(resComCP)[1]<-"CP"

 head(resComCP)
                                  CP
        Azolla filiculoides     16.90
        Callitriche brutia       8.90
        Callitriche cophocarpa   5.60
        Callitriche hamulata     8.30
        Callitriche obtusangula  1.99
        Callitriche palustris    4.00

但是,当我尝试将代码放入函数形式(请参见下文)并确保结果安全时。它给出了一个长数据帧,每个分类单元(名称)后面都带有数字5,而不是我想要的输出。

ComCP <- function(file, group, var, abu) { 

  resComCP <- as.data.frame(matrix(0, 1, 0))

for(i in unique(group)) {
  A <- as.data.frame((filter(file, group == i)))
  B <- cusumq(A, var, abu)
  resComCP[i] <- B }

  resComCP <- as.data.frame(t(resComCP))
  colnames(resComCP)[1]<-"CP"

  return(resComCP)
}

Results <- ComCP(TNmg, TNmg$Taxon, TNmg$Value, TNmg$Cover)

head(Results)
                        CP
Azolla filiculoides      5
Callitriche brutia       5
Callitriche cophocarpa   5
Callitriche hamulata     5
Callitriche obtusangula  5
Callitriche palustris    5

因此,在将其定型为函数之前,不会发生此问题,它不会直接涉及我自定义的“ cusumq”函数。我想我在使用“ {}”或“ return()”函数(R: Including a loop within a function?)时出错了。但是,我不知道如何或为什么。我在哪里出错,如何解决?

感谢您的帮助。

0 个答案:

没有答案