R 应用中从矩阵转换为向量的输出
我想在矩阵的一个边距(在我的示例中为列)上应用一个函数。问题是函数返回矩阵,而R 应用中从矩阵转换为向量的输出,r,matrix,apply,R,Matrix,Apply,我想在矩阵的一个边距(在我的示例中为列)上应用一个函数。问题是函数返回矩阵,而apply将其转换为向量,以便返回矩阵。我的目标是得到三维阵列。下面是一个示例(请注意,matrix()不是我们感兴趣的函数,只是一个示例): 一点也不复杂。简单使用 array(x, dim = c(2, 2, ncol(x))) 矩阵和常规数组按列存储在物理地址中的1D长数组中。您可以重新分配维度 好的,下面可能是您通常想要做的: tapply(x, col(x), FUN = matrix, nrow = 2
apply
将其转换为向量,以便返回矩阵。我的目标是得到三维阵列。下面是一个示例(请注意,matrix()
不是我们感兴趣的函数,只是一个示例):
一点也不复杂。简单使用
array(x, dim = c(2, 2, ncol(x)))
矩阵和常规数组按列存储在物理地址中的1D长数组中。您可以重新分配维度
好的,下面可能是您通常想要做的:
tapply(x, col(x), FUN = matrix, nrow = 2, ncol = 2)
#$`1`
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
#
#$`2`
# [,1] [,2]
#[1,] 5 7
#[2,] 6 8
#
#$`3`
# [,1] [,2]
#[1,] 9 11
#[2,] 10 12
一点也不复杂。简单使用
array(x, dim = c(2, 2, ncol(x)))
矩阵和常规数组按列存储在物理地址中的1D长数组中。您可以重新分配维度
好的,下面可能是您通常想要做的:
tapply(x, col(x), FUN = matrix, nrow = 2, ncol = 2)
#$`1`
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
#
#$`2`
# [,1] [,2]
#[1,] 5 7
#[2,] 6 8
#
#$`3`
# [,1] [,2]
#[1,] 9 11
#[2,] 10 12
您可以尝试将
矩阵
转换为数据.frame
,并使用lappy
将函数应用于列
(作为数据.frame
是一个列表
),它将返回一个列表
,其中每个元素表示列的函数结果:
lapply(as.data.frame(x), matrix, nrow = 2, ncol = 2)
# $V1
# [,1] [,2]
# [1,] 1 3
# [2,] 2 4
# $V2
# [,1] [,2]
# [1,] 5 7
# [2,] 6 8
# $V3
# [,1] [,2]
# [1,] 9 11
# [2,] 10 12
使用x的第二个定义进行编辑:
x <- array(1:24, c(4,3,2))
lapply(as.data.frame(x), matrix, nrow = 2, ncol = 2)
# $V1
# [,1] [,2]
# [1,] 1 3
# [2,] 2 4
# $V2
# [,1] [,2]
# [1,] 5 7
# [2,] 6 8
# $V3
# [,1] [,2]
# [1,] 9 11
# [2,] 10 12
# $V4
# [,1] [,2]
# [1,] 13 15
# [2,] 14 16
# $V5
# [,1] [,2]
# [1,] 17 19
# [2,] 18 20
# $V6
# [,1] [,2]
# [1,] 21 23
# [2,] 22 24
x您可以尝试将矩阵
转换为数据.frame
并使用lappy
在列
上应用您的函数(因为数据.frame
是一个列表
),它将返回一个列表
,其中每个元素表示列
的函数结果:
lapply(as.data.frame(x), matrix, nrow = 2, ncol = 2)
# $V1
# [,1] [,2]
# [1,] 1 3
# [2,] 2 4
# $V2
# [,1] [,2]
# [1,] 5 7
# [2,] 6 8
# $V3
# [,1] [,2]
# [1,] 9 11
# [2,] 10 12
使用x的第二个定义进行编辑:
x <- array(1:24, c(4,3,2))
lapply(as.data.frame(x), matrix, nrow = 2, ncol = 2)
# $V1
# [,1] [,2]
# [1,] 1 3
# [2,] 2 4
# $V2
# [,1] [,2]
# [1,] 5 7
# [2,] 6 8
# $V3
# [,1] [,2]
# [1,] 9 11
# [2,] 10 12
# $V4
# [,1] [,2]
# [1,] 13 15
# [2,] 14 16
# $V5
# [,1] [,2]
# [1,] 17 19
# [2,] 18 20
# $V6
# [,1] [,2]
# [1,] 21 23
# [2,] 22 24
x示例函数matrix()。这只是我能想象的返回矩阵的最简单函数。我知道这可能会让人困惑——将编辑问题。示例函数matrix()
不是我们感兴趣的函数。这只是我能想象的返回矩阵的最简单函数。我知道这可能会让人困惑——我会编辑这个问题。这是我的第一个想法,但很难扩展。请参阅我的编辑,因此我想在调用apply()
之后,我必须继续重新确定数组的尺寸。在数组中进行剪切比较容易,例如x[,1,]
这是我的第一个想法,但很难扩展。请参阅我的编辑,因此我想在调用apply()
后,我必须继续重新标注数组的尺寸。在数组中进行剪切比较容易,例如x[,1,]
与第一个示例中的相同参见与第一个示例中的相同参见另请参见