[已解决] 如何把cell中的'~'换成‘0’?

[复制链接]
lijiaxin0932 发表于 2015-4-22 13:52:13
部分数据如下~谢谢啦
'A11HA01'
'~'
'~'
'V03AB32'
'A11GA01'
'~'
'~'
'A11HA05'
'~'

最佳答案


adidas9910 发表于 2015-4-23 09:02:56
用个简单的循环就行了

  1. A = {'A11HA01'; '~'; '~'; 'V03AB32'; 'A11GA01'; '~'; '~'; 'A11HA05';'~'}
  2. for ii = 1:length(A)
  3.     if A{ii}=='~'
  4.         A{ii} = 0;
  5.     end
  6. end
  7. A
复制代码

16 条回复


lijiaxin0932 发表于 2015-4-22 15:16:12
:(:(:(:(没人嘛

lijiaxin0932 发表于 2015-4-22 15:29:11
@adidas9910

lijiaxin0932 发表于 2015-4-22 15:29:47
@honglei.chen

syrinx 发表于 2015-4-22 15:34:46
先用find把‘~’的位置找出来,在把'0'写到这些位置

lijiaxin0932 发表于 2015-4-23 08:40:30
syrinx 发表于 2015-4-22 15:34
先用find把‘~’的位置找出来,在把'0'写到这些位置

有没有具体程序。。。

adidas9910 发表于 2015-4-23 09:02:56
用个简单的循环就行了

  1. A = {'A11HA01'; '~'; '~'; 'V03AB32'; 'A11GA01'; '~'; '~'; 'A11HA05';'~'}
  2. for ii = 1:length(A)
  3.     if A{ii}=='~'
  4.         A{ii} = 0;
  5.     end
  6. end
  7. A
复制代码
回复此楼

lijiaxin0932 发表于 2015-4-23 09:06:21
adidas9910 发表于 2015-4-23 09:02
用个简单的循环就行了

哈哈 找到你一处错误  是‘0’ ~~~

adidas9910 发表于 2015-4-23 09:07:50
lijiaxin0932 发表于 2015-4-23 09:06
哈哈 找到你一处错误  是‘0’ ~~~

有进步:lol

lijiaxin0932 发表于 2015-4-23 09:09:46

一丢丢啦~~多谢大神指点拉~~~

lijiaxin0932 发表于 2015-4-23 09:15:59

还有一个问题~~~

[m,n] = size(DTI);
A=zeros(m);
sim=zeros(m);

for i=1:m-1
    for j=i+1:m
        k=sum(DTI(i,:)&DTI(j,:));
        if k>0
            A(i,j)=1;
        end
    end
end

for i=1:m-1
    for j=i+1:m
        p=strcmp(path{i},'0');
        q=strcmp(path{j},'0');
    if p==1||q==1
        sim(i,j)=-1;
    elseif p==0&&q==0
        a=path{i};b=path{j};
       s1=strcmp(a(5),b(5));
       s2=strcmp(a(6),b(6));
       s3=strcmp(a(end-1:end),b(end-1:end));
       if  s1==1
          s1=1/3;  
           end
       if s2==1;
          s2=1/3;   
          end
       if  s3==1
          s3=1/3;
               end
  sim(i,j)=s1+s2+s3;
    end
    end
end

Pathway_out= sim;
Pathway_out(~A) = 0;


就是以前问过你的问题。。

突然就出错了。。。


>> NR_path_sim
Index exceeds matrix dimensions.

Error in NR_path_sim (line 22)
       s1=strcmp(a(5),b(5));



lijiaxin0932 发表于 2015-4-23 09:18:01

这个程序按理说不应该出错的。。。。但现在不知道为什么

难道是因为我用了这句语句处理cell-path吗

path=cellfun(@(s)textscan(s,'%s',1,'Delimiter',','),path);

adidas9910 发表于 2015-4-23 09:18:24
lijiaxin0932 发表于 2015-4-23 09:15
还有一个问题~~~

[m,n] = size(DTI);

错误信息很清楚啊
s1=strcmp(a(5),b(5));
这一行,a或b的元素可能并没有5那么多。

lijiaxin0932 发表于 2015-4-23 09:20:10
adidas9910 发表于 2015-4-23 09:18
错误信息很清楚啊
s1=strcmp(a(5),b(5));
这一行,a或b的元素可能并没有5那么多。 ...

可它明明有这么多阿。。。。。

'hsa04010'
'0'
'0'
'0'
'hsa00900'
'hsa04614'
'hsa04020'
'0'
'hsa00230'
'0'

adidas9910 发表于 2015-4-23 09:22:32
lijiaxin0932 发表于 2015-4-23 09:20
可它明明有这么多阿。。。。。

'hsa04010'

学着用断点 breakpoints 调试吧。不会的话,
a=path{i};b=path{j};
这里两个分号暂时去掉,看看出错前a和b是啥

lijiaxin0932 发表于 2015-4-23 09:30:34
adidas9910 发表于 2015-4-23 09:22
学着用断点 breakpoints 调试吧。不会的话,
a=path{i};b=path{j};
这里两个分号暂时去掉,看看出错前a和 ...

'0'
'0'
'0'
'0'
'0'
'0'
'0'
'0'
'0'
'0'
'0'
'0'
'0'
'0'
'0'
'hsa00564'
'hsa04020'

出错的就是后两位,,,实在是找不出来哪不对

lijiaxin0932 发表于 2015-4-23 09:54:36
adidas9910 发表于 2015-4-23 09:22
学着用断点 breakpoints 调试吧。不会的话,
a=path{i};b=path{j};
这里两个分号暂时去掉,看看出错前a和 ...

我找到了~

就是这句话的原因
path=cellfun(@(s)textscan(s,'%s',1,'Delimiter',','),path);
导致了我path 每一元素都是一个cell  所以要读取两次
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表