停止'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