我是堆栈溢出和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?)时出错了。但是,我不知道如何或为什么。我在哪里出错,如何解决?
感谢您的帮助。