前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一个R语言错误

记一个R语言错误

作者头像
用户1075469
发布2021-04-30 11:48:15
3390
发布2021-04-30 11:48:15
举报
文章被收录于专栏:科技记者科技记者

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

R中的实现

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

代码语言:javascript
复制
   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语言是向量化的。这个循环中第一个赋值就把一列给赋值了,所以计算就不会正确了,除了第一个结果。看看错误的结果:

代码语言:javascript
复制
# 运行第一个时的结果
                   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

正确操作

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

代码语言:javascript
复制
    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)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科技记者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • R中的实现
  • 正确操作
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档