Сводные функции h2o.ai несовместимы с group_by - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь (существенно) ускорить некоторый код R, перейдя к R + h2o.ai.

Я группирую по одной факторной переменной, но получаю ошибку, когда пытаюсь вычислить оконные квантили, асимметриюили kurtosis.

Существует ли список функций суммирования в h2o, которые несовместимы с подходом разделения-применения-объединения?Это относится только к sql-аналоговым функциям, таким как sum, count или stdev?

Этот код завершается ошибкой:

for(i in col_idx_list){
  proc_cols_list <- names(df.hex)[i]

  group_cols_list <- c("group_variable_factor")

  h2o.quantile(x=df.hex[,proc_cols_list])

  temp <- h2o.group_by(data=df.hex,
                       by=group_cols_list,
                       mean(proc_cols_list),
                       var(proc_cols_list),
                       skewness(proc_cols_list),
                       gb.control=list(na.methods="ignore")  )

  if(i ==first_index){
    df_summs <- temp
  } else {
    df_summs <- h2o.cbind(df_summs , temp[,2:ncol(temp)])
  }
}

Этот код работает нормально:

for(i in col_idx_list){
  proc_cols_list <- names(df.hex)[i]

  group_cols_list <- c("group_variable_factor")

  h2o.quantile(x=df.hex[,proc_cols_list])

  temp <- h2o.group_by(data=df.hex,
                       by=group_cols_list,
                       mean(proc_cols_list),
                       var(proc_cols_list),
                       gb.control=list(na.methods="ignore")  )

  if(i ==first_index){
    df_summs <- temp
  } else {
    df_summs <- h2o.cbind(df_summs , temp[,2:ncol(temp)])
  }
}

Текст ошибки (для краткости сокращен):

ERROR: Unexpected HTTP Status code: 400 Bad Request (url = http://localhost:54321/99/Rapids)
Error in .h2o.doSafeREST(h2oRestApiVersion = h2oRestApiVersion, urlSuffix = page,  : 
ERROR MESSAGE:
No enum constant water.rapids.ast.prims.mungers.AstGroup.FCN.skewness
ERROR: Unexpected HTTP Status code: 404 Not Found (url = http://localhost:54321/3/Frames/RTMP_sid_8712_17?row_count=10)

ERROR MESSAGE:

Object 'RTMP_sid_8712_17' not found for argument: key

1 Ответ

0 голосов
/ 20 февраля 2019

Ошибка указывает на то, что skewness является проблемой.Полный список методов агрегации, разрешенных в h2o.group_by(), см. В разделе «Подробности» (внизу страницы) документации .

. Для вашего удобства я добавляю Деталираздел здесь - вы можете увидеть, что асимметрия в настоящее время не включена (если вы заинтересованы в создании билета JIRA ):

Подробно В случае использования n.methods в gb.control возможны три варианта настройки.«all» будет включать NA в вычисление функций.«rm» полностью удалит все поля NA.«ignore» удалит NA из числителя, но сохранит строки для вычислительных целей.Если указан список, меньший, чем количество групп столбцов, список будет дополнен «игнорировать».Обратите внимание, что для указания списка имен столбцов в списке gb.control необходимо добавить аргумент col.names.Подобно na.methods, col.names будет дополнять список именами столбцов по умолчанию, если длина меньше количества предоставленных групп столбцов.Поддерживаемые функции включают nrow.Эта функция обязательна и принимает строку для имени сгенерированного столбца.Другие поддерживаемые агрегатные функции принимают аргументы col и na для указания столбцов и обработки NA ("all", "ignore" и объект GroupBy; max вычисляет максимум каждого столбца, указанного в col, для каждой группы объекта GroupBy; среднее вычисляетсреднее значение каждого столбца, указанного в столбце col для каждой группы объекта GroupBy; min вычисляет минимум каждого столбца, указанного в столбце col для каждой группы объекта GroupBy; mode рассчитывает режим каждого столбца, указанного в столбце col, для каждой группы GroupBy.object; sd вычисляет стандартное отклонение каждого столбца, указанного в столбце col для каждой группы объекта GroupBy; ss вычисляет сумму квадратов каждого столбца, указанного в столбце col для каждой группы объекта GroupBy; sum вычисляет сумму каждого столбца, указанного в столбце.col для каждой группы объекта GroupBy, и var вычисляет дисперсию каждого столбца, указанного в col для каждой группы объекта GroupBy. Если агрегат предоставляется без значения (например, как max в сумме (col = "X1 ", na =" все "). Среднее (col =" X5 ", na =" все "). Max ()), тогда предполагается, что агрегация должна применяться ко всем столбцам, кроме столбцов GroupBy.Однако операции со столбцами String выполняться не будут.Они будут пропущены.Еще раз обратите внимание, что nrow требуется и не может быть пустым.

...