我想使用 R 将具有非唯一行名的表中的数值数据汇总到具有唯一行名的结果表中,其中的值使用自定义函数进行汇总。总结逻辑是:如果最大值与最小值之比 < 1.5,则使用值的平均值,否则使用中值。因为表很大,所以我尝试使用reshape2包中的 melt() 和 cast() 函数。
# 具有非唯一行名的示例表 tab <- data.frame(gene=rep(letters[1:3], each=3), s1=runif(9), s2=runif(9)) # 融化 tab.melt <- 融化(标签,id=1) # 用逻辑总结的函数:如果 max/min < 1.5 则表示平均值,否则为中位数 总结 <- 函数(x){ifelse(max(x)/min(x)<1.5, mean(x), median(x))} # 使用汇总值强制转换 dcast(tab.melt,基因~变量,总结)
上面的最后一行代码会导致错误通知。
vapply 中的错误(索引,乐趣,.default): 值必须是“逻辑”类型, 但 FUN(X[[1]]) 结果是类型“双” 另外:警告信息: 1:在 max(x) 中:max 没有非缺失参数;返回-Inf 2:在 min(x) 中:min 没有非缺失参数;返回 Inf
我究竟做错了什么?请注意,如果 summarise 函数只返回 min() 或 max(),则不会出现错误,但会出现有关“没有非缺失参数”的警告消息。谢谢你的任何建议。
(我要使用的实际表是 200x10000 的表。)