2013-05-12 59 views
0

我想找到“如果矩阵B是非奇异矩阵,求b,否则如果逆然后找到B的广义逆”使用“if”语句中的R

,所以我说这句话。但它不起作用。

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列= 1b的广义含INVERS的价值。

请帮我....

+0

用于调试(因为第一个问题是丢失的'('),总是一个好主意,证明了第一个'ifelse'然后插入下属一个 – 2013-05-12 18:07:57

回答

0

你有一个流浪(

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

请注意,您不需要ifelse这一点。 ncol(b)==nrow(b)不返回矢量,也不返回det(b)==0

+0

我知道了哇,非常感谢:) – 2013-05-12 03:15:09

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 
+0

ahhhhh !!!我得到了这个哇,非常感谢:)! – 2013-05-12 03:15:59