警告消息:在if(CID2 $ XPM!= 0){:条件有长度> 1,只使用第一个元素

时间:2016-11-03 18:51:31

标签: r sas

您好我正在编写一个程序,它采用x和y坐标并计算力的方位角。我写了以下代码。

if(CID2$XPM != 0){
  CID2$APVECAZI <- atan(CID2$YPM/CID2$XPM)*180/3.14159
}else if(CID2$XPM < 0){
  CID2$APVECAZI <- CID2$APVECAZI + 180
}else if(CID2$XPM > 0 & CID2$YPM < 0){
  CID2$APVECAZI <- CID2$APVECAZI + 360
}else if(CID2$XPM == 0 & CID2$YPM > 0){
  CID2$ACVECAZI <- CID2$AVECAZI <- 90
}else if(CID2$XPM == 0 & CID2$YPM < 0){
  CID2$APVECAZI <- CID2$AVEDCAZI270
}

我得到的错误如下:

Warning message:
In if (CID2$XPM != 0) { :
  the condition has length > 1 and only the first element will be used

有谁知道如何纠正这个问题。我有SAS代码,这是基于工作没有问题,但在R我被卡住了。

SAS CODE是:

IF  XPM NE  0   THEN    APVECAZI=ATAN(YPM/XPM)*180/3.14159;
IF  XPM LT  0   THEN    APVECAZI=APVECAZI+180;
IF  XPM GT  0   AND YPM LT  0   THEN    APVECAZI=APVECAZI+360;
IF  XPM=0   AND YPM GT  0   THEN    APVECAZI=90;
IF  XPM=0   AND YPM LT  0   THEN    APVECAZI=270;

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以以嵌套方式在R中使用ifelse语句。最后一次分配以NA结束。

CID2$APVECAZI <- ifelse(CID2$XPM !=0, atan(CID2$YPM/CID2$XPM)*180/3.14159, 
                         ifelse(CID2$XPM <0, CID2$APVECAZI+180,
                                ifelse(CID2$XPM > 0 & CID2$YMP < 0, CID2$APVECAZI+360, 
                                      ifelse(CID2$XPM == 0 & CID2$YPM > 0, 90, 
                                            ifelse(CID2$XPM == 0 & CID2$YPM < 0, 270, NA))))) 

CID2
  XPM YPM APVECAZI
1   0   2       NA
2   0   2       NA
3   0  45       NA
4  50  90 60.94545
5  60 275 77.69205
6 275   0  0.00000