停止'apply'将R中的矩阵转换为向量?

停止'apply'将R中的矩阵转换为向量?,r,matrix,R,Matrix,假设我们有这个矩阵。我要每行的分位数 library(tidyverse) 但是,如果我只为分位数提供1个参数,则输出将转换为向量 m %>% apply(1, quantile, probs = c(0.05, 0.9)) %>% t 5% 90% [1,] 1.4 8.2 [2,] 2.4 9.2 [3,] 3.4 10.2 [4,] 4.4 11.2 如何将输出保持为具有正确列名的矩阵?确定。首先,第二个结果是一个矩阵,它只是缺少列名,因为ap

假设我们有这个矩阵。我要每行的分位数

library(tidyverse)
但是,如果我只为
分位数
提供1个参数,则输出将转换为向量

m %>% 
  apply(1, quantile, probs = c(0.05, 0.9)) %>%
  t

      5%  90%
[1,] 1.4  8.2
[2,] 2.4  9.2
[3,] 3.4 10.2
[4,] 4.4 11.2

如何将输出保持为具有正确列名的矩阵?

确定。首先,第二个结果是一个矩阵,它只是缺少列名,因为
apply
的默认简化行为。要解决此问题,请使用
sapply(simplify=FALSE)
lappy

#对于%>%
库(magrittr,warn.conflicts=FALSE)
m%
T
colnames(res1)
#> [1] "5%"  "90%"
res2%
应用(1,分位数,概率=c(0.05))%>%
T
colnames(res2)
#>空的
#res2是一个矩阵
继承(res2,‘矩阵’)
#>[1]是的
#要保留列名,请使用lappy,然后使用rbind
调用('rbind',lappy(1:nrow(m),函数(i)分位数(m[i,],probs=0.05)))
#>       5%
#> [1,] 1.4
#> [2,] 2.4
#> [3,] 3.4
#> [4,] 4.4

由(v0.3.0)于2020-12-03创建,唯一的小修正是
apply
的第二个结果是一个向量,它通过
t()转换为矩阵。
Yes!这有点微妙,我没有详细说明<代码>应用将结果“简化”为向量,转置是一个缺少列名的矩阵。
m %>% 
  apply(1, quantile, probs = c(0.05, 0.9)) %>%
  t

      5%  90%
[1,] 1.4  8.2
[2,] 2.4  9.2
[3,] 3.4 10.2
[4,] 4.4 11.2
m %>% 
  apply(1, quantile, probs = c(0.05)) %>%
  t

     [,1] [,2] [,3] [,4]
[1,]  1.4  2.4  3.4  4.4