2013-05-12 85 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