2012-05-17 2 views
1

While 루프 및 If 문을 사용하여 그래프에 텍스트를 생성합니다.If 및 While 루프를 사용하여 데이터 파일의 열에서 오류 검사

If 문을 오류 검사로 사용하려고합니다. Lon과 Lat 열에 데이터가 없으면이를 건너 뛰고 다음 행으로 이동하십시오.

:

myData3[1:7,] 
    ISO3V10    Country No.of.Documents Lat Lon 
1  AGO    Angola    0 NA NA 
2  ALB    Albania    0 NA NA 
3  ARE United Arab Emirates    0 NA NA 
4  ARG   Argentina    7 NA NA 
5  ARM    Armenia    0 NA NA 
6  AUS   Australia    96 151 -34 
7  AUT    Austria    28 NA NA 

내가 지금까지 작성한 코드는 다음과 같습니다 : 같이 내 데이터 테이블에서

북위와 론 컬럼에는 값이 아래와 같이 그들이 NA로 표시하는 이유되는 없습니다

Error in matrix(unlist(value, recursive = FALSE, use.names = FALSE), nrow = nr, : 
'data' must be of a vector type 

    Error in 0 = while (data < 1000) { : 
    invalid (do_set) left-hand side to assignment 

내가 분류하는 도움이 필요합니다 : 나는 코드를 변경할 때

myData3 <- read.delim(file="C:\\Documents\\RScriptAnalysis\\noofpublications3.txt", header = TRUE, sep = "\t") 
data = 0 
n = 0 
while(data < 100){ 
if (myData3["Lat", 0] & myData3["Lon", 0]) 
    { 
    data = data +1 
    n = n +1 
    } 
else { 
    text(myData3[n,"Lat"],myData3[n,"Lon"],myData3[n,"No.of.Documents"],adj=0.5) 
    n = n +1 
    data = data +1 
    } 
} 

나는 이러한 오류 메시지를 얻을 수 이 오류를 확인하고이 작업을 수행 할 수 있도록 내 코드를 적용하는 방법 !!!

더 궁금한 점이 있으시면 언제든지 문의하십시오.

if (myData3["Lat", 0] & myData3["Lon", 0]) 

당신은 n 번째 행과 myData3의 위도/경도 열이 NA 있는지 확인하려면 :

는 건배, 제스

+1

편집을 이전 버전으로 롤백했습니다. 새로운 질문이있는 경우이 질문을 편집하는 대신 별도의 질문으로 질문해야합니다. – joran

답변

2

그것은이 라인입니다.

myData3[n,'Lat'] 

또는 (데이터 프레임에 대한) :

당신이 할 행을 nLat에 액세스하려면 뭔가 NA (데이터 누락), is.na를 사용 여부를

myData3$Lat[n] 

테스트 (?is.na 참조).

그래서 :

if (is.na(myData$Lat[n]) && is.na(myData$Lon[n])) 

작동합니다. ('및'연산자/논리적 인 단축키 인 &&에 유의하십시오. 버전은 벡터 요소 - 와이즈 ()를 비교합니다. 따라서 c(TRUE, TRUE, FALSE) & c(FALSE, TRUE, FALSE)c(FALSE, TRUE, FALSE)입니다. 스칼라에는 사용하지 마십시오.


위의 문제를 해결하지만, 코드에 더 노트는 것입니다 : R은 많은 시간을 의미 대신 당신이 당신의 가치를 척 수있는 루프를 수행하는 벡터화 언어는 스칼라와 사용이 같은 코드. 예를 들어

, x이 벡터는 1 ~ length(x)에가는 각 i에 대한 x[i] + 5을하고 루프를 작성하지 않아도 의미x에 각 요소를 5을 추가 할 것입니다 x + 5.위도와 경도가되지 NA 같은 곳

위에서, 당신은 단지 myData3에 행 번호의 벡터를 생성 할 수 있습니다 : 여기

idx = !is.na(myData3$Lat) & !is.na(myData3$Lon) 

idx이의 벡터 될 것입니다 TRUE 및 그 같다 FALSE 길이가 myData3 인 행의 수만큼 길어집니다 (요소를 얻으려면 && 대신 여기 &을 사용합니다.). idxTRUE이고, 여기서 Lat 및 Lon은 이고, 그렇지 않은 경우는이며, 그렇지 않은 경우 FALSE입니다. 그런 다음

방금과 같이 한 번에 text에 유효한 행을 공급할 수, 플롯 : 이것은 대부분의 R 기능을 벡터화되어 있기 때문에

text(myData3$Lat[idx],myData3$Lon[idx],myData3$No.of.Documents[idx],adj=0.5) 

, 당신은 전체 벡터에 공급할 수 있도록하고 각 요소를 루핑하는 효과가 있습니다.

myData3$Lat[idx]은 인 행이 idx 인 행 즉, 위도와 경도가 모두있는 행을 선택합니다.

벡터화 된 언어 (예 : R 및 Matlab)로 처음이라면 걱정하지 않으셔도됩니다. 재미 있어요!

관련 문제