是否存在将数值向量转换为概率分布的R内置函数?
问题
我有一个R向量:
x <- c(0.3, 0.3, 0.2, 0, -0.1)
我需要把向量里的负值替换成0,再将结果归一化到总和为1。我自己写了个函数实现这个需求:
to_dist <- function(x) { non_negative <- pmax(x, 0) non_negative / sum(non_negative) } to_dist(x) # [1] 0.375 0.375 0.250 0.000 0.000
想知道R里有没有现成的内置函数能直接完成这个操作?
解答
R基础包没有专门的内置函数一步完成这两个操作,但可以用基础函数的组合简化写法,不用单独定义函数:
pmax(x, 0) / sum(pmax(x, 0))
如果需要重复调用,你自己写的to_dist函数已经很简洁高效,这也是这类需求的常规实现方式。
如果愿意依赖第三方包,scales包的normalize函数可以配合pmax完成:
library(scales) normalize(pmax(x, 0), method = "sum")
不过这种方式需要额外加载扩展包,若想避免依赖,基础函数组合或自定义函数是更优的选择。
内容的提问来源于stack exchange,提问作者Santiago
相关产品推荐
相关产品推荐

