【问题标题】:Understanding matrix sub-setting: `mat[2, mat[1, ] == 1] == 1` (2)了解矩阵子设置:`mat[2, mat[1, ] == 1] == 1` (2)
【发布时间】:2019-05-08 21:05:44
【问题描述】:

this answer

我无法理解以下内容:

   mean(sim[2, sim[1, ] == 1] == 1)

请参阅以下内容:

> alpha <- c(1, 1) / 2
> mat <- matrix(c(1 / 2, 0, 1 / 2, 1), nrow = 2, ncol = 2) # Different than yours
> 
> chainSim <- function(alpha, mat, n) 
+ {
+   out <- numeric(n)
+   out[1] <- sample(1:2, 1, prob = alpha)
+   
+   for(i in 2:n)
+       out[i] <- sample(1:2, 1, prob = mat[out[i - 1], ])
+   out
+ }
> 
> sim <- replicate(chainSim(alpha, mat, 1 + 5), n = 100)
> 
> x <- (sim[2, sim[1, ] == 1] == 1)
> x
 [1] FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE
[15]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE
[29] FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
[43]  TRUE FALSE FALSE FALSE
> 

如果x 仅由一些truefalse 值组成,那么x均值 怎么会变成数值呢?

> sim <- replicate(chainSim(alpha, mat, 1 + 5), n = 100)
> 
> x <- (sim[2, sim[1, ] == 1] == 1)
> y <- mean(x)
> y
[1] 0.6086957

【问题讨论】:

  • 内部是1和0,查看mean(c(1, 0, 1, 1, 0))[1] 0.6# mean(c(TRUE, FALSE, TRUE, TRUE, FALSE)) [1] 0.6`

标签: r matrix


【解决方案1】:

OP的问题

如果x只是由一些真假值组成,那么x的平均值怎么会变成一个数值呢?

根据?logical的文档

在需要数值的上下文中,逻辑向量被强制转换为整数向量,TRUE 映射为 1L,FALSE 映射为 0L,NA 映射为 NA_integer_。

因此,取逻辑向量的mean 类似于integer 向量

mean(c(1, 0, 1, 1, 0))
#[1] 0.6

mean(c(TRUE, FALSE, TRUE, TRUE, FALSE))
#[1] 0.6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 2019-03-23
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多