【问题标题】:Error with custom aggregate function for a cast() call in R reshape2R reshape2 中的 cast() 调用的自定义聚合函数出错
【发布时间】:2011-06-17 15:18:58
【问题描述】:

我想使用 R 将具有非唯一行名的表中的数值数据汇总到具有唯一行名的结果表中,该结果表具有使用自定义函数汇总的值。总结逻辑是:如果最大值与最小值之比 reshape2包中的melt()和cast()函数。

# 具有非唯一行名的示例表
tab 

上面的最后一行代码导致错误通知。

vapply 中的错误(索引,乐趣,.default):
  值必须是“逻辑”类型,
 但 FUN(X[[1]]) 结果是类型“双”
另外:警告信息:
1:在 max(x) 中:max 没有非缺失参数;返回-Inf
2:在 min(x) 中:min 没有非缺失参数;返回 Inf

我做错了什么?请注意,如果 summarise 函数只返回 min() 或 max(),则不会出现错误,但会出现有关“没有非缺失参数”的警告消息。感谢您的任何建议。

(我要使用的实际表格是 200x10000 的表格。)

【问题讨论】:

    标签: r casting aggregate reshape reshape2


    【解决方案1】:

    简答:为填充提供一个值,如下所示 acast(tab.melt, 基因~变量, summarise, fill=0)

    长答案: 看起来你的函数被包装如下,然后被传递给 vapply 在 vaggregate 函数中(dcast 调用 cast 调用 vaggregate 调用 vapply):

    fun <- function(i) {
        if (length(i) == 0) 
            return(.default)
        .fun(.value[i], ...)
    }
    

    要找出 .default 应该是什么,执行这段代码

    if (is.null(.default)) {
        .default <- .fun(.value[0])
    }
    

    即.value[0] 被传递给函数。当 x 为 numeric(0) 时,min(x) 或 max(x) 返回 Inf 或 -Inf。但是,max(x)/min(x) 返回具有逻辑类的 NaN。所以当执行 vapply 时

    vapply(indices, fun, .default)
    

    默认值是逻辑类(被 vapply 用作模板),函数在开始返回双精度时失败。

    【讨论】:

    • 感谢您的建议和解释。在 dcast() 调用中为“填充”提供值后,我能够让代码工作。
    【解决方案2】:

    dcast() 尝试将缺失组合的值设置为默认值。

    你可以通过填充参数来指定这个,但是如果填充=NULL, 然后使用 fun(0-lenght vector) 返回的值(即这里的 summarise(numeric(0)))作为默认值。

    请参阅 ?dcast

    那么,这里有一个解决方法:

     dcast(tab.melt, gene~variable, summarize, fill=NaN)
    

    【讨论】:

    • 感谢您对此的调查和帮助。
    猜你喜欢
    • 2012-07-22
    • 2014-02-23
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多