Применить агрегат к определенной функции, используя R - PullRequest
0 голосов
/ 31 марта 2019

Я пишу агрегатную функцию, используя R, и мне нужно вызвать функцию, определенную для агрегации peakdet_new.

peakdet_new <- function(dmx, v, x = NULL)
{
 ....

  if(nrow(data.frame(list(maxtab = maxtab)))== 1)
  {
    data.frame(DataMatrix=c(unique(dmx)), Status=c("OK"))
  } else
  {
    data.frame(DataMatrix=c(unique(dmx)), Status=c("NOK"))
  }
  #list(maxtab = maxtab) #,mintab = mintab)
  #return(maxtab)
  # if(nrow(data.frame(list(maxtab = maxtab)) >= 1))
  #        {
  #          return(print("NOK"))
  #        } else
  #          {
  #          return(print("OK"))
  #        }

}

Что дает мне вывод:

peakdet_new(DMX_$DataMatrix, DMX_$X, DMX_$Y)
                        DataMatrix Status
1 00003275216311504500-A1820800306    NOK

Вот мой стол

DataMatrix  X   Y
00003275216311504500-A1812300356    0.23    30000
00003275216311504500-A1812300356    0.23    30483
00003275216311504500-A1829600367    0.41    30000
00003275216311504500-A1829600367    0.42    30483

И проблема в том, что я не знаю, как применить peakdet_new к статистической функции, ниже того, что я сделал

data.agg <- aggregate(DMX_together[c('X', 'Y')], by = DMX_together['DataMatrix'], FUN = peakdet_new(DMX_together$DataMatrix, DMX_together$X, DMX_together$Y))
Error in match.fun(FUN) : 
  'peakdet_new(DMX_together$DataMatrix, DMX_together$X, DMX_together$Y)' is not a function, character or symbol

без аргументов

data.agg <- aggregate(DMX_together[c('X', 'Y')], by = DMX_together['DataMatrix'], FUN = peakdet_new)
Error in FUN(X[[i]], ...) : argument "v" is missing, with no default

Я ожидаю вывод агрегатной функции:

   DataMatrix                         Status
1 00003275216311504500-A1820800306    NOK
2 00003275216311504500-A1829600367    NOK

1 Ответ

1 голос
/ 31 марта 2019

Поскольку вам нужно запускать операции над целым фреймом данных, рассмотрите возможность вызова peakdet_new с by подмножеством каждого отдельного DataMatrix . С другой стороны, aggregate обычно ожидает, что вектор единичного уровня, разрезанный по коэффициентам на , вернет агрегированный вектор (позднее связанный с сгруппированными коэффициентами для возврата фрейма данных).

Вызов by запустит операцию для каждого подмножества фреймов данных, чтобы построить список (равный уникальным значениям подмножества), где вы можете rbind все элементы в одном фрейме данных:

df_list <- by(DMX_, DMX_$DataMatrix, function(sub) 
                peakdet_new(sub$DataMatrix, sub$X, sub$Y))

final_df <- do.call(rbind, unname(df_list))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...