需要帮助简化,重复代码

时间:2016-11-02 08:13:18

标签: r

function(q,b,Data1,Data2){  
x<-sum(
  ifelse(Data1[13+q,b]/Data1[12+q,b]>Data2[13+q,1]/Data2[12+q,1],1,0)+
  ifelse(Data1[13+q,b]/Data1[11+q,b]>Data2[13+q,1]/Data2[11+q,1],1,0)+
  ifelse(Data1[13+q,b]/Data1[10+q,b]>Data2[13+q,1]/Data2[10+q,1],1,0)+
  ifelse(Data1[13+q,b]/Data1[9+q,b]>Data2[13+q,1]/Data2[9+q,1],1,0)+
  ifelse(Data1[13+q,b]/Data1[8+q,b]>Data2[13+q,1]/Data2[8+q,1],1,0)+
  ifelse(Data1[13+q,b]/Data1[7+q,b]>Data2[13+q,1]/Data2[7+q,1],1,0)+
  ifelse(Data1[13+q,b]/Data1[6+q,b]>Data2[13+q,1]/Data2[6+q,1],1,0)+
  ifelse(Data1[13+q,b]/Data1[5+q,b]>Data2[13+q,1]/Data2[5+q,1],1,0)+
  ifelse(Data1[13+q,b]/Data1[4+q,b]>Data2[13+q,1]/Data2[4+q,1],1,0)+
  ifelse(Data1[13+q,b]/Data1[3+q,b]>Data2[13+q,1]/Data2[3+q,1],1,0)+
  ifelse(Data1[13+q,b]/Data1[2+q,b]>Data2[13+q,1]/Data2[2+q,1],1,0)+
  ifelse(Data1[13+q,b]/Data1[1+q,b]>Data2[13+q,1]/Data2[1+q,1],1,0)
)/12
}

有没有办法简化这个? (没有字符,只有数据集中的数字)

谢谢

2 个答案:

答案 0 :(得分:2)

您可以结合使用两项知识来改进代码:

首先,您可以将一个数字除以一个向量,Window { visible: true width: 640 height: 480 title: qsTr("Hello World") id: mainwindow DynamicTableView { id: tableview height: mainwindow.height - 50 width: mainwindow.width y: 5 x: 0 model: myModel } Rectangle { id: abutton anchors.top: tableview.bottom height: 40 width: mainwindow.width Text { text: "Click to Add" anchors.fill: parent } MouseArea { anchors.fill: parent onClicked: { TableController.AddEntry() } } } } 将返回一个带有元素分割的向量。例如:

R

不等式两侧的分子始终相同,可以使用上面的。因此,您可以只调用一次,而不是为每个不等式明确地调用它。

其次,当您尝试执行算术运算时,5 / c(1,2,3,4,5,6) # [1] 5.0000000 2.5000000 1.6666667 1.2500000 1.0000000 0.8333333 TRUE的表达式将被强制转换为FALSE1你的案件分工,或计算均值)。不等式返回0TRUE值。明确告诉FALSE将其转换为R0是浪费精力,因为1会在最后一步自动执行此操作。

将它们放在一起在一个简化的函数中:

R

答案 1 :(得分:0)

这简化了一下:

function(q,b,Data1,Data2){  
    data1_num <- Data1[13+q,b]
    data2_num <- Data2[13+q,1]
    x <- 0 
    for (i in 1:12) {
        x <- x + ((data1_num/Data1[i+q,b]) > (data2_num /Data2[i+q,1]))
    } 
    x <- x /12
    #return(x)
}

但是如果您提供数据示例和您期望的输出,我确信有更好的方法来简化它