楼主: 跳蚤侠
9929 22

[问答] 运行一个循环,结果得到了numeric(0),但是循环内的每一次运算是正确的 [推广有奖]

  • 2关注
  • 0粉丝

硕士生

30%

还不是VIP/贵宾

-

威望
0
论坛币
448 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
967 点
帖子
62
精华
0
在线时间
159 小时
注册时间
2010-4-23
最后登录
2024-6-18

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
代码如下:
CER <- function(partition1,partition2){
  if (length(partition1)!= length(partition2))
    stop("partition1 and 2 dont have the same observations")
  mycer=0
  for (i in 1:length(partition1)-1){
    for (j in (i+1):length(partition1)){
      mycer <- mycer+abs(as.numeric(partition1[i]==partition1[j])-as.numeric(partition2[i]==partition2[j]))
    }
  }
  error_rate <- mycer/(length(partition1)*(length(partition1)-1)/2)
  return (error_rate)
}
测试的数据为:
partition1<- c(3,3,1,1,1,3,1,1,1,1,1,3,3,1,3,1,3,1,3,1,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 1, 3, 2, 3, 2, 1, 1, 3, 3, 1, 1, 3, 1, 2, 1, 1, 3)
partition2<-c(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ,3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
先运行循环
mycer=0
  for (i in 1:length(partition1)-1){
    for (j in (i+1):length(partition1)){
      mycer <- mycer+abs(as.numeric(partition1[i]==partition1[j])-as.numeric(partition2[i]==partition2[j]))
    }
得到的结果是 mycer为numeric(0),但是单独运行每一个循环,能得到正确的数字,不知道是怎么回事

二维码

扫码加我 拉你入群

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

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

关键词:numeric Eric NUM CER

回帖推荐

jiangbeilu 发表于13楼  查看完整内容

沙发
jiangbeilu 学生认证  发表于 2015-11-9 17:55:14 |只看作者 |坛友微信交流群
你要把mycer保存成一个矩阵形式才行啊,
试一下,
mycer=matrix(NA,i,j)
然后把循环里的:
  1. mycer[i,j] <- mycer[i,j]+abs(as.numeric(partition1[i]==partition1[j])-as.numeric(partition2[i]==partition2[j]))
复制代码

使用道具

藤椅
跳蚤侠 发表于 2015-11-9 18:02:21 |只看作者 |坛友微信交流群
jiangbeilu 发表于 2015-11-9 17:55
你要把mycer保存成一个矩阵形式才行啊,
试一下,
mycer=matrix(NA,i,j)
好像不行,出来都是NA,而且mycer也不是一个矩阵,他得到的应该是一个数值

使用道具

板凳
jiangbeilu 学生认证  发表于 2015-11-9 18:07:01 |只看作者 |坛友微信交流群
你把你要用这两串数做什么,简单明了地说一下吧,我看一下不用循环怎么做。
在R里,能不用循环就不用循环的

使用道具

报纸
跳蚤侠 发表于 2015-11-9 18:18:15 |只看作者 |坛友微信交流群
jiangbeilu 发表于 2015-11-9 18:07
你把你要用这两串数做什么,简单明了地说一下吧,我看一下不用循环怎么做。
在R里,能不用循环就不用循环的 ...
本意是做一个针对聚类结果的评估的,Partition1和partition2是两种聚类结果,参考的公式是
其中,n是样本个数,P和Q为两个聚类结果

使用道具

地板
jiangbeilu 学生认证  发表于 2015-11-9 18:26:39 |只看作者 |坛友微信交流群
公式看不见额

使用道具

7
跳蚤侠 发表于 2015-11-9 19:01:29 |只看作者 |坛友微信交流群
jiangbeilu 发表于 2015-11-9 18:26
公式看不见额

使用道具

8
跳蚤侠 发表于 2015-11-9 19:04:31 |只看作者 |坛友微信交流群
跳蚤侠 发表于 2015-11-9 19:01
\[CER:=\sum_{i>i'}\lvert{1_{P(ii')}-1_{Q(ii')}\rvert}\]

使用道具

9
jinkelazzz 发表于 2015-11-9 19:12:19 |只看作者 |坛友微信交流群
j的循环加括号了,i为啥不加

使用道具

10
jiangbeilu 学生认证  发表于 2015-11-9 19:19:40 |只看作者 |坛友微信交流群
跳蚤侠 发表于 2015-11-9 19:04
解释一下公式的意思可以不?因为我不做你这方向的研究,就算看一下公式,也不一定能准确理解这个意思。
你将运算说的越详细,越有利于别人把主要精力放在解决问题本身上,而不是还要别人帮你去考虑许多额外的工作
l是什么,p(ii'),p不是个向量么,怎么会有两个下标?你最终的目的就是为了写出这个CER function吧

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-11-5 16:23