遍历R

时间:2018-07-05 23:45:06

标签: r

我正在尝试缩短我的代码并使它更有效率。

我的用例是这样:

(基本上)它将从用户那里获取输入,以便基本上描述数据的类型。然后,需要计算每种类型的数量。

就目前而言,它的效率很低,但是可以正常工作。 目前,我的代码是这样的:

#############
#1 = 2g4    #
#2 = 5g     #
#3 = dual   #
#############

num_of_Antennas = 4

ant1 = 1
ant2 = 2
ant3 = 2
ant4 = 1


#initialize each count to 0
count2g4 = 0
count5g = 0
countDual = 0

if (num_of_Antennas==4){


  #check type for ant1
  if (ant1==1){
    count2g4 = count2g4+1
  } else if (ant1==2){
    count5g = count5g+1
  } else if (ant1==3){
    countDual = countDual+1;
  } 
  ###############

  #check type for ant2  
  if (ant2==1){
    count2g4 = count2g4 +1
  } else if (ant2==2){
    count5g = count5g +1
  } else if (ant2==3){
    countDual = countDual +1;
  }
  ###############

  #check type for ant3  
  if (ant3==1){
    count2g4 = count2g4 +1
  } else if (ant3==2){
    count5g = count5g +1
  } else if (ant3==3){
    countDual = countDual +1;
  }
  ###############

  #check type for ant4  
  if (ant4==1){
    count2g4 = count2g4 +1
  } else if (ant4==2){
    count5g = count5g +1
  } else if (ant4==3){
    countDual = countDual +1;
  }
  ###############




} else if (num_of_Antennas==3){
  #check type for ant1
  if (ant1==1){
    count2g4 = count2g4+1
  } else if (ant1==2){
    count5g = count5g+1
  } else if (ant1==3){
    countDual = countDual+1;
  } 
  ###############

  #check type for ant2  
  if (ant2==1){
    count2g4 = count2g4 +1
  } else if (ant2==2){
    count5g = count5g +1
  } else if (ant2==3){
    countDual = countDual +1;
  }
  ###############

  #check type for ant3  
  if (ant3==1){
    count2g4 = count2g4 +1
  } else if (ant3==2){
    count5g = count5g +1
  } else if (ant3==3){
    countDual = countDual +1;
  }
  ###############




} else if (num_of_Antennas==2){
  #check type for ant1
  if (ant1==1){
    count2g4 = count2g4+1
  } else if (ant1==2){
    count5g = count5g+1
  } else if (ant1==3){
    countDual = countDual+1;
  } 
  ###############

  #check type for ant2  
  if (ant2==1){
    count2g4 = count2g4 +1
  } else if (ant2==2){
    count5g = count5g +1
  } else if (ant2==3){
    countDual = countDual +1;
  }
  ###############

} else if (num_of_Antennas==1){
  #check type for ant1
  if (ant1==1){
    count2g4 = count2g4+1
  } else if (ant1==2){
    count5g = count5g+1
  } else if (ant1==3){
    countDual = countDual+1;
  } 




} else (print("ERROR, Num of antennas = 0"))

在编码方面,我有点菜鸟,但是我敢肯定,这样做有更好的方法。

我开始考虑将其转换为某种参数函数的想法,但是目前为止,我还没有找到一种好的方法。 那么,如何在不影响灵活性的情况下做到这一点呢? 我还希望将其扩展到最大12天线,这将以指数方式增加这种简单任务的代码数量。

提前谢谢! 科迪

编辑: 正如已经指出的那样,使用因素将是非常有益的,但是仍然让我寻找某种原始用户界面,该界面比仅仅填写一个向量要容易一些。我想要类似的东西:

#(not working)
ant1 = 1
ant2 = 2
ant3 = 3
ant4 = 1


data = paste(ant1, ant2, ant3, ant4 sep = ",")
data


  ant <- c(data)

  ant_f <- factor(ant, levels=c(1:3),labels =c("2G4", "5G", "Dual"))
  table(ant_f)

1 个答案:

答案 0 :(得分:3)

感谢您提供代码段。我希望我能正确理解您要做什么。我建议您将天线保持在向量中。向量的长度将告诉您要计算的天线数量。这是一个12根天线的例子。

#ant <- c(1,2,2,1)
ant <- c(1,2,2,1,3,2,2,3,1,1,3,2)

ant_f <- factor(ant, levels=c(1:3),labels =c("2g", "5g", "dual"))
table(ant_f)
#> 
#> ant_f
#>   2g   5g dual 
#>    4    5    3 

基本上所有您需要做的都是定义可能值的解释(在这种情况下,因子应该很好地工作),它将用作字典。然后只用table()

进行计数

您可以通过矢量子设置来引用单个天线。因为这是一个因素,它将带有标签。

ant_f[5]
#> [1] dual
#> Levels: 2g 5g dual