本楼主最近沉迷学习 R base 中的 apply 函数,产生了一个不算奇怪的问题。
如下所示,对一个矩阵按行来应用函数,为撒应用后的每一行是应用前的每一列,无意中成了转置的效果呢?
```{r}
my_matrix <- matrix(1:6,
nrow = 2,
ncol = 3,
byrow = FALSE)
dimnames(my_matrix)[[1]] <- c('第1行', '第2行')
dimnames(my_matrix)[[2]] <- c('第1列', '第2列', '第3列')
apply(
my_matrix,
MARGIN = 1,
FUN = function(x)
x
)
```
第1行 第2行
第1列 1 2
第2列 3 4
第3列 5 6
如果是对一个3维数组瞎设置 MARGIN 参数,也会得到一些不算奇怪的结果。比如下面这些例子……整体上来看,我倒是知道应用前和应用后的数据分别长撒样,但是没明白为撒会变成这样
```{r}
# 创建一个维度为(2, 3, 4)的三维数组
my_array <- array(c(1:24), dim = c(2, 3, 4))
print(my_array)
```
, , 1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
, , 2
[,1] [,2] [,3]
[1,] 7 9 11
[2,] 8 10 12
, , 3
[,1] [,2] [,3]
[1,] 13 15 17
[2,] 14 16 18
, , 4
[,1] [,2] [,3]
[1,] 19 21 23
[2,] 20 22 24
```{r}
apply(my_array, MARGIN = 1, FUN = function(x) x)
```
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
[4,] 7 8
[5,] 9 10
[6,] 11 12
[7,] 13 14
[8,] 15 16
[9,] 17 18
[10,] 19 20
[11,] 21 22
[12,] 23 24
```{r}
apply(my_array, MARGIN = 2, FUN = function(x) x)
```
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
[3,] 7 9 11
[4,] 8 10 12
[5,] 13 15 17
[6,] 14 16 18
[7,] 19 21 23
[8,] 20 22 24
```{r}
apply(my_array, MARGIN = 3, FUN = function(x) x)
```
[,1] [,2] [,3] [,4]
[1,] 1 7 13 19
[2,] 2 8 14 20
[3,] 3 9 15 21
[4,] 4 10 16 22
[5,] 5 11 17 23
[6,] 6 12 18 24
```{r}
apply(my_array, MARGIN = 1:2, FUN = function(x) x)
```
, , 1
[,1] [,2]
[1,] 1 2
[2,] 7 8
[3,] 13 14
[4,] 19 20
, , 2
[,1] [,2]
[1,] 3 4
[2,] 9 10
[3,] 15 16
[4,] 21 22
, , 3
[,1] [,2]
[1,] 5 6
[2,] 11 12
[3,] 17 18
[4,] 23 24
```{r}
apply(my_array, MARGIN = 1:3, FUN = function(x) x)
```
, , 1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
, , 2
[,1] [,2] [,3]
[1,] 7 9 11
[2,] 8 10 12
, , 3
[,1] [,2] [,3]
[1,] 13 15 17
[2,] 14 16 18
, , 4
[,1] [,2] [,3]
[1,] 19 21 23
[2,] 20 22 24