Я новичок в переполнении стека и R, и не очень знаком с кодированием. Особенно зацикливание или некоторые объяснения в функции справки, которые мне трудно понять. У меня есть некоторые проблемы, включая цикл "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: Включение цикла в функцию? ). Тем не менее, я не знаю, как и почему. Где я могу пойти не так и как я могу это решить?
Спасибо за вашу помощь.