美文网首页
记一个R语言错误

记一个R语言错误

作者: zd200572 | 来源:发表于2021-04-22 16:26 被阅读0次

    发现如果习惯了一个编程语言,想当然的往另一个上套,是要吃大亏的,这是一个真实的经历。我最早学的Python,习惯了它的英语化编程,到了最近操作表的多了起来,发现R语言更顺手些,就转向了R语言,一直用得还不错,属于不求效率,只求能解决问题的主,不过,今天发现的程序bug,令我汗颜了一波。详细如下:

    R中的实现

    先来看R语言的代码,一个for循环,两三行,如此简单,就出了个大毛病:

       for (i in 1:length(rownames(T_P))) {
         T_P$Median[i] <- mean(as.numeric(T_P[i,]))
       }
    # 数据在这里:
                      AL      DH     RN
    En3 1.87694501 1.58559653 1.32844769
    En8 1.76545633 1.49141366 1.24953920
    En9 1.09405837 0.92423334 0.77434304
    

    各位能发现问题出在哪吗?就出在这个赋值操作上,重要的问题说3遍,R语言是向量化的R语言是向量化的R语言是向量化的。这个循环中第一个赋值就把一列给赋值了,所以计算就不会正确了,除了第一个结果。
    看看错误的结果:

    # 运行第一个时的结果
                       AL      DH     RN  Median
    En3 1.87694501 1.58559653 1.32844769  1.59699641
    En8 1.76545633 1.49141366 1.24953920  1.59699641
    En9 1.09405837 0.92423334 0.77434304  1.59699641
    # 运行完成后
                       AL      DH     RN
    En3 1.87694501 1.58559653 1.32844769 1.59699641
    En8 1.76545633 1.49141366 1.24953920 1.52585140
    En9 1.09405837 0.92423334 0.77434304 1.09740779
    

    正确操作

    当然我这代码不是最优的,解决问题是第一要务,优化第二,很多时候优化就省略了,如果没有速度上需求,特别是数据量比较小的情况。

        Median <- c() 
        for (i in 1:length(rownames(T_P))) {
          Median <- c(Median, mean(as.numeric(T_P[i,])))
        }
        T_P <- cbind(T_P, Median)
    

    相关文章

      网友评论

          本文标题:记一个R语言错误

          本文链接:https://www.haomeiwen.com/subject/nwffrltx.html