在R中使用“if”语句

时间:2013-05-12 02:23:59

标签: r

我想找到“如果矩阵b是非奇异矩阵,则找到b的倒数,否则找到b的广义逆”

所以我做了这个陈述。但它不起作用。

a<-c(1:9)
a
b<-matrix(a,3,3)
b
library(MASS)
ifelse(ncol(b)==nrow(b),(ifelse(det(b)==0,ginv(b),solve(b)),ginv(b))

然后我修改了这样的语句

a<-c(1:9)
a
b<-matrix(a,3,3)
b
library(MASS)
d<-ifelse(det(b)==0,ginv(b),solve(b))
e<-ginv(b)
ifelse(ncol(b)==nrow(b),d,e)

但答案只是行= 1 col = 1 b的广义逆的值。

请帮助我....

2 个答案:

答案 0 :(得分:0)

你有一个迷路(

ifelse(ncol(b)==nrow(b),ifelse(det(b)==0,ginv(b),solve(b)),ginv(b))
## [1] -0.6388889

请注意,您不需要ifelsencol(b)==nrow(b)不会返回向量,也不会返回det(b)==0

答案 1 :(得分:0)

要回答您的问题,请使用简单的ifelse语句返回值。 取代

d <- ifelse(det(b)==0,ginv(b),solve(b))
e <- ginv(b)
ifelse(ncol(b)==nrow(b),d,e)

由此:

d <- if(det(b)==0) ginv(b) else solve(b)
e <- ginv(b)
if(ncol(b)==nrow(b)) d else e

##            [,1]          [,2]       [,3]
## [1,] -0.6388889 -5.555556e-02  0.5277778
## [2,] -0.1666667 -9.234353e-17  0.1666667
## [3,]  0.3055556  5.555556e-02 -0.1944444