R 从矩阵创建布尔矩阵

R 从矩阵创建布尔矩阵,r,matrix,stringr,R,Matrix,Stringr,我有以下矩阵: > myletters <- matrix(letters[1:4], ncol = 2) > myletters [,1] [,2] [1,] "a" "c" [2,] "b" "d" 现在我有一个逻辑向量,但我想要一个矩阵。 我期望的结果是: [,1] [,2] [1,] TRUE TRUE [2,] FALSE FALSE 不要误解我的意思,当然我知道一些可能的方法,但是我认为像matrix(str_detect(

我有以下矩阵:

> myletters <- matrix(letters[1:4], ncol = 2)
> myletters
     [,1] [,2]
[1,] "a"  "c" 
[2,] "b"  "d" 
现在我有一个逻辑向量,但我想要一个矩阵。 我期望的结果是:

      [,1]  [,2]
[1,]  TRUE  TRUE
[2,] FALSE FALSE

不要误解我的意思,当然我知道一些可能的方法,但是我认为像
matrix(str_detect(myletters,“[ac]”),ncol=2)这样的解决方案非常难看。一定有更好的办法吗?
我不知道为什么会这样。在这种情况下,我得到了我想要的输出,与下面的情况有什么区别

> matrix(1:4, ncol = 2) > 2
      [,1] [,2]
[1,] FALSE TRUE
[2,] FALSE TRUE

我们可以将其重新分配,以获取
的lhs上原始数据的结构,其中一个选项是

out <- `dim<-`(myletters %in% c("a", "c"), dim(myletters))
out
#      [,1]  [,2]
#[1,]  TRUE  TRUE
#[2,] FALSE FALSE

out类似于
apply
by的解决方案,这里是一个带有
base R
的解决方案,使用
apply()
grepl()

      [,1]  [,2]
[1,]  TRUE  TRUE
[2,] FALSE FALSE

非常感谢。我喜欢应用
的方式。您知道如何使用
purr
-函数实现这一点吗?我通常更喜欢它们而不是应用
family。@TobiSonne the purrr family
map
,在data.frame的列中循环。这里是一个
矩阵
,因此,您可能需要将其转换为
data.frame
或tibble,即
作为.data.frame(myletters)%%>%map\u df(str\u detect,“[ac]”
哦,当然!我的数据最初是一个
data.frame
,所以这个解决方案更好!谢谢你的回答
myletters==“a”| myletters==“c”
适用于示例矩阵。
structure(str_detect(myletters, "[ac]"), dim = dim(myletters))
#      [,1]  [,2]
#[1,]  TRUE  TRUE
#[2,] FALSE FALSE
apply(myletters, 2, str_detect, "[ac]")
#       [,1]  [,2]
#[1,]  TRUE  TRUE
#[2,] FALSE FALSE
library(purrr)
as.data.frame(myletters) %>%
    map_df(str_detect, "[ac]")
library(dplyr)
as.data.frame(myletters) %>%
      mutate_all(str_detect, "[ac]")
out <- `dim<-`(myletters %in% c("a", "c"), dim(myletters))
out
#      [,1]  [,2]
#[1,]  TRUE  TRUE
#[2,] FALSE FALSE
apply(myletters, 2, function(v) grepl("[ac]",v))
      [,1]  [,2]
[1,]  TRUE  TRUE
[2,] FALSE FALSE