全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2530 7
2013-01-19
先检查输入矩阵是否为矩阵,再检验是否为对称阵。
iis.sym=function(x){
        if (length(x[,1])!=length(x[1,]))
        stop ("请输入方阵")
        else{

           for  (i  in 1:length(x[1,])){
                for ( j in 1:length(x[,1])){
                        if (x[i,j]!=x[j,i])
                            stop ("x不是对称阵")
                }
           }       
               
        }
"x是对称阵"
}
       
               

谢谢。
               

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-1-19 20:21:52
复制代码
第二个Stop函数后的括号应该是半角字符,你代码里的是全角字符。在编译的时候会报错。

上面贴的是修改过的代码,我在R 2.13上运行没有问题。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-19 20:40:31
Aharach 发表于 2013-1-19 20:21
第二个Stop函数后的括号应该是半角字符,你代码里的是全角字符。在编译的时候会报错。

上面贴的是修改过 ...
的确是这个问题,看了半天没看出来。。。。谢谢了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-19 23:26:16
@qoiqpwqr 兄
看此题循环,就情不自禁改了下循环。
iis <- function(x){
  if(nrow(x)!=ncol(x)) print("请输入方阵")
  else{
    if(all(x==t(x))) print("对称方阵")else print("不对称方阵")
  }
}
a<- matrix(c(1,2,3,2,2,3,3,3,4),nc=3,byrow=T)
b <- matrix(c(1,2,3,1,2,1,1,2,3),nc=3,byrow=T)
c <- matrix(c(1,2,1),nc=3,byrow=T)
iis(a)....
都可以很好的运行。

但。。。疑惑的事情是(事实上,先想到这个):
iis2 <- function(x){
  ifelse(nrow(x)!=ncol(x),print("请输入方阵"),
         ifelse(all(x==t(x)),print("为对称方阵"),print("不对称")))
}

> iis2(a)
[1] "为对称方阵"
[1] "为对称方阵"
> iis2(d)
[1] "为对称方阵"
[1] "为对称方阵"
> iis2(c)
[1] "请输 入方阵"
[1] "请输入方阵"
怎么运行了两次?真邪门了!
所以把print 换为cat看看:
iis2 <- function(x){
  ifelse(nrow(x)!=ncol(x),print("请输入方阵"),
         ifelse(all(x==t(x)),cat("为对称方阵"),cat("不对称")))
}


> iis2(a)

为对称方阵
错误于ifelse(all(x == t(x)), cat("为对称方阵"), cat("不对称")) :   更换参数长度为零

OMG!直接错误了!!!! 看来是ifelse的语句的问题了。

xy <- 2
ifelse(xy > 3,cat("1"),cat("0"))


> xy <- 2
> ifelse(xy > 3,cat("1"),cat("0"))
0
错误于ifelse(xy > 3, cat("1"), cat("0")) : 更换参数长度为零

这是为什么呢?
???

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-20 00:56:26
可以用isSymmetric来判断是否为对称方阵
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-20 01:01:20
jmpamao 发表于 2013-1-19 23:26
@qoiqpwqr 兄
看此题循环,就情不自禁改了下循环。
iis  3,cat("1"),cat("0"))[ ...
那个两次输出的问题:一个是print输出的,一个是ifelse输出的。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群