R:矩阵行运算

R:矩阵行运算,r,R,我有一个矩阵a,它有大量的行和列(在这样一个矩阵的一个示例下面),偶尔有一整行0值(在这个特定示例的第4行中) 我希望有一个函数来检查一行的所有行,并允许我对这些行的每个元素执行操作。有没有一个简单的方法 我还想知道矩阵是否是适合这种情况的数据结构。感觉不太对,也许数据帧更适合这样做 A = matrix( c(0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0

我有一个矩阵a,它有大量的行和列(在这样一个矩阵的一个示例下面),偶尔有一整行0值(在这个特定示例的第4行中)

我希望有一个函数来检查一行的所有行,并允许我对这些行的每个元素执行操作。有没有一个简单的方法

我还想知道矩阵是否是适合这种情况的数据结构。感觉不太对,也许数据帧更适合这样做

A = matrix(
  c(0, 0, 1, 0, 0, 0, 0,
    1, 0, 1, 1, 0, 0, 0,
    0, 0, 0, 1, 1, 0, 0,
    0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 1, 1,
    0, 0, 0, 1, 1, 0, 1), nrow=7,ncol=7,byrow = TRUE)

对于矩阵的每一行,我想确定其中是否只有0。如果是这样,我想(为每个元素)设置值1/N(其中N是ncol(A))

Sudo代码:

If(总和(A行)==0)
然后A=1/ncol(A)的行显然你想要这个:

A[rowSums(A != 0) == 0,] <- 1/ncol(A)
#          [,1]      [,2]      [,3]      [,4]      [,5]      [,6]      [,7]
#[1,] 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 0.0000000
#[2,] 1.0000000 0.0000000 1.0000000 1.0000000 0.0000000 0.0000000 0.0000000
#[3,] 0.0000000 0.0000000 0.0000000 1.0000000 1.0000000 0.0000000 0.0000000
#[4,] 0.1428571 0.1428571 0.1428571 0.1428571 0.1428571 0.1428571 0.1428571
#[5,] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1.0000000 1.0000000
#[6,] 0.0000000 0.0000000 0.0000000 1.0000000 1.0000000 0.0000000 1.0000000
#[7,] 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 0.0000000

显然你想要这个:

A[rowSums(A != 0) == 0,] <- 1/ncol(A)
#          [,1]      [,2]      [,3]      [,4]      [,5]      [,6]      [,7]
#[1,] 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 0.0000000
#[2,] 1.0000000 0.0000000 1.0000000 1.0000000 0.0000000 0.0000000 0.0000000
#[3,] 0.0000000 0.0000000 0.0000000 1.0000000 1.0000000 0.0000000 0.0000000
#[4,] 0.1428571 0.1428571 0.1428571 0.1428571 0.1428571 0.1428571 0.1428571
#[5,] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1.0000000 1.0000000
#[6,] 0.0000000 0.0000000 0.0000000 1.0000000 1.0000000 0.0000000 1.0000000
#[7,] 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 0.0000000

请更具体地描述你想做的操作。您可以使用
apply
在矩阵行上循环,但可能有更有效的替代方法。对于该矩阵的每一行,我想确定其中是否只有0。如果是这样,我想(为每个元素)设置值1/N(其中N是ncol(A))。Sudo代码:如果(sum(A的行)==0),那么A的行=1/ncol(A)请将此添加到问题中(通过编辑问题)。请更具体地描述您想要执行的操作。您可以使用
apply
在矩阵行上循环,但可能有更有效的替代方法。对于该矩阵的每一行,我想确定其中是否只有0。如果是这样,我想(为每个元素)设置值1/N(其中N是ncol(A))。Sudo代码:如果(sum(A的行)==0),那么A的行=1/ncol(A)请将此添加到问题中(通过编辑问题)。是否有一个更通用的命令,我可以在其中插入一个在每一行上单独执行的函数(针对所有行)?是的,请阅读我上面的评论。但是,这种方法相对较慢。是否有理由使用
rowSums
而不是
any
all
。如果不使用
apply
,您将如何使用这些函数?我将使用
apply
,它会慢得多吗?目前没有在计算机上检查是否有一个更通用的命令,我可以在其中插入一个在每一行上单独执行的函数(对于所有行)?是的,请阅读我上面的评论。但是,这种方法相对较慢。是否有理由使用
rowSums
而不是
any
all
。如果不使用
apply
,您将如何使用这些函数?我将使用
apply
,它会慢得多吗?当前未在计算机上进行检查