Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 应用中从矩阵转换为向量的输出_R_Matrix_Apply - Fatal编程技术网

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,]
与第一个示例中的相同参见与第一个示例中的相同参见另请参见