Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用逻辑运算符缩短变量代码_R_Logical Operators_Operator Precedence - Fatal编程技术网

R 使用逻辑运算符缩短变量代码

R 使用逻辑运算符缩短变量代码,r,logical-operators,operator-precedence,R,Logical Operators,Operator Precedence,我试图用5个标准编码代谢综合征变量肥胖(3个可能的二元结果)、胰岛素抵抗(3个可能的二元结果)、血脂异常TGC(3个可能的二元结果)、血脂异常HDL(2个可能的二元结果)和高血压(4个可能的二元结果)。如果受试者对这5项标准中的任何3项呈阳性,他将被视为代谢综合征阳性 考虑到任何符合4或5项标准的受试者都将由代理人负责,我尝试将这些纳入C5,3。但是我的代码太大了,因为我试图覆盖任何可能的组合。是否可以使用运算符优先级使代码更小以使其更紧凑 METSYN <- array (NA,dim

我试图用5个标准编码代谢综合征变量肥胖(3个可能的二元结果)、胰岛素抵抗(3个可能的二元结果)、血脂异常TGC(3个可能的二元结果)、血脂异常HDL(2个可能的二元结果)和高血压(4个可能的二元结果)。如果受试者对这5项标准中的任何3项呈阳性,他将被视为代谢综合征阳性

考虑到任何符合4或5项标准的受试者都将由代理人负责,我尝试将这些纳入C5,3。但是我的代码太大了,因为我试图覆盖任何可能的组合。是否可以使用运算符优先级使代码更小以使其更紧凑

METSYN <- array (NA,dim = dim(BancoTOTAL)[1] )
for (i in 1:791){  
  METSYN[i] <- ifelse ( #OID1 OID2
    BancoTOTAL$sexo.x[i] == 0 && BancoTOTAL$cintura.x[i] > 90 
                       && BancoTOTAL$Glic[i] >= 100 
                       && BancoTOTAL$TRIG[i] > 150 
                       |BancoTOTAL$sexo.x[i] == 1 && BancoTOTAL$cintura.x[i] > 80 
                       && BancoTOTAL$Glic[i] >= 100 
                       && BancoTOTAL$TRIG[i] > 150 
                       |BancoTOTAL$IMC[i] > 30
                       && BancoTOTAL$Glic[i] >= 100 
                       && BancoTOTAL$TRIG[i] > 150

and soon
, 1, 0)
}
METSYN=100
&&银行总额$TRIG[i]>150
|BancoTOTAL$sexo.x[i]==1&&BancoTOTAL$cintura.x[i]>80
&&银行总额$Glic[i]>=100
&&银行总额$TRIG[i]>150
|银行总额$IMC[i]>30
&&银行总额$Glic[i]>=100
&&银行总额$TRIG[i]>150
很快
, 1, 0)
}
这是我使用中间分类变量重新编写的代码

METSYN <- array(NA, dim = dim(BancoTOTAL)[1])
    for (i in 1:(dim(BancoTOTAL)[1])){
      METSYN[i] <- ifelse(
        #OID1
        BancoTOTAL$obesity[i] == 1
        && BancoTOTAL$insulinR[i] == 1
        && BancoTOTAL$dyslipidemiaTGC[i] == 1
        #OID2
        |BancoTOTAL$obesity[i] == 1
        && BancoTOTAL$insulinR[i] == 1
        && BancoTOTAL$dyslipidemiaHDL[i] == 1
        #OIH
        |BancoTOTAL$obesity[i] == 1
        && BancoTOTAL$insulinR[i] == 1
        && BancoTOTAL$HBP[i] == 1
        #OD1D2
        |BancoTOTAL$obesity[i] == 1
        && BancoTOTAL$dyslipidemiaTGC[i] == 1
        && BancoTOTAL$dyslipidemiaHDL[i] == 1
        #OD1H
        |BancoTOTAL$obesity[i] == 1
        && BancoTOTAL$dyslipidemiaTGC[i] == 1
        && BancoTOTAL$HBP[i] == 1
        #OD2H
        |BancoTOTAL$obesity[i] == 1
        && BancoTOTAL$dyslipidemiaHDL[i] == 1
        && BancoTOTAL$HBP[i] == 1
        #ID1D2
        |BancoTOTAL$obesity[i] == 1
        && BancoTOTAL$dyslipidemiaTGC[i] == 1
        && BancoTOTAL$dyslipidemiaHDL[i] == 1
        #ID1H
        |BancoTOTAL$insulinR[i] == 1
        && BancoTOTAL$dyslipidemiaTGC[i] == 1
        && BancoTOTAL$HBP[i] == 1
        #ID2H
        |BancoTOTAL$insulinR[i] == 1
        && BancoTOTAL$dyslipidemiaHDL[i] == 1
        && BancoTOTAL$HBP[i] == 1
        #D1D2H
        |BancoTOTAL$dyslipidemiaTGC[i] == 1
        && BancoTOTAL$dyslipidemiaHDL[i] == 1
        && BancoTOTAL$HBP[i] == 1
        , 1, 0 )
    }
METSYN <- unlist(lapply(1:dim(BancoTOTAL)[1], function (x){
  (BancoTOTAL$obesity[x]+BancoTOTAL$insulinR[x]+BancoTOTAL$dyslipidemiaTGC[x]+BancoTOTAL$dyslipidemiaHDL[x]+BancoTOTAL$HBP[x])>=3
}))
METSYN这对你有用吗?(使用中间分类变量)

METSYN=3
}))

我只需检查一次所有条件,然后检查此向量的长度是否大于3。是否使用中间向量?我如何编写代码(我在R中是个十足的noob)?我尝试使用中间变量来解决这个问题,它使代码更加紧凑,但仍然不是很优雅。你能给我提供一个带有
dput
的示例数据集吗。我会调查一下并尽力帮助你。这是我修改过的代码