Цикл внутри функции R - PullRequest
       9

Цикл внутри функции R

0 голосов
/ 07 ноября 2018

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

Спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...