[英]Iterating through variable names in 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个天线最大值,这将增加这样一个简单任务的代码数量EXPONENTIALLY。
提前致谢! 科迪
编辑:正如已经指出的那样,使用因素将是非常有益的,但它仍然让我寻找某种原始用户界面,比仅填充向量更容易遵循。 我想要类似的东西:
#(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)
感谢您提供代码片段。 我希望我能正确理解你要做的事情。 我建议你把天线放在矢量中。 矢量长度将告诉您要计算的天线数量。 这是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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.