2014-10-11 3 views
0

연습 할 때 간단한 데이터가 있고 각 시간의 최대, 최소 인구를 계산하려고했을 때 아래처럼, 나는 "In max (state $ time.population [look.at])와 같은 경고 메시지를 받았다. 나는 매번 "zone"을 수동으로 변경하여 루프를 하나씩 실행하려고 시도했다. 그 이유는 무엇인지 잘 모르겠습니다. 영역의 각 레벨마다 공백이 있기 때문에 그것이 원인인지 궁금합니다. 나는 그것을 캐릭터로 변경하려했으나 여전히 작동하지 않았습니다 ... 아무도이 문제를 해결할 수있는 방법을 알고 있습니까? 독특한 (주 $의 time.zone.1) the.zones < - -R의 factor 변수에 대한 루프의 경우 (레벨은 공백이있는 문자 임) 경고 메시지 "max에 누락 된 인수 없음"을 반환합니다.

state <- read.csv("states.csv") 
state$population <- as.numeric(gsub("\\,","",state$population)) 

은/* < the.zones as.character (the.zones) */

/새 라인을/

state$time.zone.1 <- as.character(state$time.zone.1) 
the.zones <- unique(state$time.zone.1) 


low <- c() 
high <-c() 
for (zone in the.zones){ 
    look.at <- state$time.zone.1 == zone 
    low <- append(low,min(state$population[look.at])) 
    high <-append(high,max(state$time.population[look.at])) 
} 
    low 
    high 

Result: 
Warning messages: 
1: In max(state$time.population[look.at]) : 
    no non-missing arguments to max; returning -Inf 
2: In max(state$time.population[look.at]) : 
    no non-missing arguments to max; returning -Inf 
3: In max(state$time.population[look.at]) : 
    no non-missing arguments to max; returning -Inf 
4: In max(state$time.population[look.at]) : 
    no non-missing arguments to max; returning -Inf 
5: In max(state$time.population[look.at]) : 
    no non-missing arguments to max; returning -Inf 
6: In max(state$time.population[look.at]) : 
    no non-missing arguments to max; returning -Inf 

기타 정보 : 시간대의 레벨 : 레벨 : 알래스카 표준시 (UTC-09) CST (UTC-6) EST (UTC-5) HST (UTC-10) MT (UTC-07) PT (UTC-8) 문자 변경 : "CST (UTC-6)" "AKST (UTC-09)" "MT (UTC-07)" "PT (UTC-8)" "EST (UTC-5)" "HST (UTC- 잠재적 인 이유는 두 가지입니다

 name abbreviation  capital most.populous.city population square.miles time.zone.1 
1 ALABAMA   AL Montgomery   Birmingham 4,708,708  52,423 CST (UTC-6) 
2  ALASKA   AK  Juneau   Anchorage 698,473  656,425 AKST (UTC-09) 
3 ARIZONA   AZ  Phoenix   Phoenix 6,595,778  114,006 MT (UTC-07) 
4 ARKANSAS   AR Little Rock  Little Rock 2,889,450  53,182 CST (UTC-6) 
5 CALIFORNIA   CA Sacramento  Los Angeles 36,961,664  163,707  PT (UTC-8) 
6 COLORADO   CO  Denver    Denver 5,024,748  104,100 MT (UTC-07) 
+0

데이터를 읽는 방법에 대한 추가 정보가 없으면이 연습은 쓸모가 없습니다. 데이터 샘플을 읽고 해당 데이터를 파일 또는 인라인으로 실행되는 데이터 프레임으로 제공 할 준비가 된 MWE를 제공하십시오. – epsilone

+0

그 데이터는 원본 csv 파일을 읽은 후에 인쇄 한 데이터입니다. 나는 수입 과정에 어떤 문제가 있다고 생각하지 않는다. – miaoxingren

답변

1

:

1) state 목록에는 $time.population 수준 없습니다처럼 -10) "

데이터 보인다 무엇. 그러면 min에 의해 처리되는 변수 NULL이 생성되어 해당 경고 메시지가 반환됩니다. 자신을 위해보십시오 : 그것은 그 값을 반환하도록 논리적 평등 state$time.zone.1 == zone는 결코 만족하기 때문에

min(NULL) 

2) (대부분의 경우) 변수 look.atnumeric(0)이다. 자신을 위해 그것을 확인 :

min(numeric(0)) 

이 두 경우를 방지하기 위해, 당신은 최소한의 경우에만 !is.null(look.at) (첫 번째 점)와 length(look.at)!=0 (두 번째 점)를 계산하기 때문에 만족하고, 조건을 추가하는 등의 벡터의 min을 계산하지 마십시오.


편집 :

1) state$population <- as.numeric(gsub("\\,","",state$population))이 잠재적으로 numeric(0)를 반환 할 수 있습니다 : 문제를 일으킬 수있는 다른 여러 가지가 있습니다.확실히 안전하지 않은)

the.zones <- unique(state$time.zone.1) 
the.zones <- as.character(the.zones) 

그러나 당신은 character (zone in the.zone로 변환 된 원래 데이터 (state$time.zone.1를) 비교 :

2) 또 다른 이상한 것은, 여기 character로 변환을 수행 비교를 수행하고 mismatchs으로 이어질 수 방법은 나쁜 변환이 발생하는 경우 :

for(zone in the.zone){ 
    look.at <- state$time.zone.1 == zone 
    ... 
} 

어느 characterstate$time.zone.1를 변환하거나을 변환하지 않습니다.

+0

답변 해 주셔서 감사합니다! 인구 (누락 된 데이터가없고 숫자가 계속됨)에 대한 전체 데이터가 있습니다. 이전에 내 질문에 언급했는데 나는 프로그램을 한 걸음 씩 나 자신을 실행했다. 이는 아래 코드를 실행하고 $ time.zone.1 == zone을 모두 만족한다는 것을 의미합니다. look.at <- state $ time.zone.1 == "CST (UTC-6)"; 낮음 <- append (낮음, 최소 (state $ population [look.at])); 높음 <-append (높음, 최대 (state $ time.population [look.at])). 매번 영역의 값을 실제 수준으로 변경하면 방정식이 모두 만족됩니다. – miaoxingren

+0

나는보기 좋을 다른 것들로 대답을 편집했다. 작동하지 않는 경우 오류가 발생한 위치의 MWE (즉, 데이터의 일부)를 제공해야합니다. 수동으로 확인해도 특정 영역에서 실패하지는 않습니다. 행운을 빕니다! – epsilone

+0

방금 ​​데이터를 제 질문의 맨 아래에 추가했습니다. the.zones와 time.zone.1이 같은 유형이 아닐 수도 있습니다. 먼저 time.zone.1을 문자로 변경 한 다음 time.zone 문자에서 the.zones를 만듭니다. 1 그러나 여전히 작동하지 않았다. 질문 창에 '새 줄'이라는 새 프로그램을 추가했습니다. "state $ population <- as.numeric (gsub ("\\, "," "state $ population))"은 데이터의 쉼표를 제거한 것뿐입니다. – miaoxingren