我正在尝试计算离散分布的熵,我注意到使用magrittr的行为不是我所期望的。举个例子:
> x <- c("A","B","C","A","A","D")
> table(x)/length(x) %>% log2
x
A B C D
1.1605584 0.3868528 0.3868528 0.3868528
哪个不正确---值小于1的日志应为负数。如果我分解了这些步骤,我会得到正确答案:
> freq <- table(x)/length(x)
> log2(freq)
x
A B C D
-1.000000 -2.584963 -2.584963 -2.584963
答案 0 :(得分:2)
这可行,必须是许多管道的粉丝:))
library(magrittr)
x %>% table %>% divide_by(x %>% length) %>% log2
magrittr
也提供divide_by,multiply_by等。您也可以跳过包并使用以下语法
x %>% table %>% `/`(x %>% length) %>% log2
答案 1 :(得分:0)
如果您在使用管道时遇到问题,使用核心dplyr
动词(select
,mutate
,filter
等)可能会有所帮助明显你想要做什么。
library(tidyverse)
x %>%
tbl_df() %>% # Convert to a tibble
group_by(value) %>%
summarise(n=n()) %>%
mutate(freq = n / sum(n)) %>% # Calculate frequency
mutate(log = log2(freq)) # Here's log2