h2o.ai 与 group_by 不兼容的汇总函数

h2o.ai summary functions incompatible with group_by

我正在尝试(实质上)通过移动到 R+ 来加速一些 R 代码h2o.ai。

我按单个因子变量分组,但在尝试计算窗口分位数、偏度或峰度时出现错误。

h2o 中是否有与 split-apply-combine 方法不兼容的汇总函数列表?它是否仅适用于 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

错误似乎表明 skewness 有问题。有关 h2o.group_by() 中允许的聚合方法的完整列表,请参阅 documentation 的详细信息部分(页面底部)。

为了您的方便,我在这里添加了详细信息部分 - 您可以看到当前不包括偏度(如果您对此感兴趣,可以随意创建一个 JIRA ticket):

详情 在 gb.control 内的 na.methods 的情况下,有三种可能的设置。 "all" 将在函数计算中包含 NA。 "rm" 将完全删除所有 NA 字段。 "ignore" 将从分子中删除 NA,但保留这些行用于计算目的。如果提供的列表小于列组的数量,则列表将被填充 "ignore"。 请注意,要在 gb.control 列表中指定列名列表,您必须添加 col.names 参数。与 na.methods 类似,如果长度小于提供的列组数,col.names 将使用默认列名填充列表。 支持的函数包括 nrow。此函数是必需的,它接受一个字符串作为生成列的名称。其他支持的聚合函数接受 col 和 na 参数,用于指定列和 NA 的处理("all"、"ignore" 和 GroupBy 对象;max 为 GroupBy 的每个组计算 col 中指定的每个列的最大值object;mean 计算 GroupBy 对象的每组在 col 中指定的每一列的平均值;min 计算 GroupBy 对象的每一组在 col 中指定的每一列的最小值;mode 计算 col 中指定的每一列的众数GroupBy 对象的组;sd 为 GroupBy 对象的每一组计算 col 中指定的每一列的标准差;ss 为 GroupBy 对象的每一组计算 col 中指定的每一列的平方和;sum 计算 groupBy 对象的每一组的总和GroupBy 对象的每一组在 col 中指定的每一列;并且 var 计算 GroupBy 对象的每一组在 col 中指定的每一列的方差。如果提供的聚合没有值(例如,作为 max in sum(col =[=3 0=], na="all").mean(col="X5", na="all").max()), 然后假设聚合应该应用于除GroupBy 列。但是,不会对 String 列执行操作。他们将被跳过。再次注意,nrow是必填项,不能为空