2013-03-30 3 views
3

나는 R 아주 새로운 해요 여기뿐만 아니라 때로는 내 데이터가데이터에 필요한 값이 없을 때 코드를 무시하는 방법은 무엇입니까?

그래서 나는이

Random Price 
11.23 0.68 
66.77 0.51 
68 0.46 
78 0.51 
88 0.32 
89 0.51 
90 0.27 
91 0.65 

와 유사한 데이터가 이상한 얻을 수 있기 때문에 지금까지 내 코드 내 코드를 수정 도움이 필요 :

newdata <- data[ which(data$Random>=30 
& data$Random < 50), ] 
Pvalue<- lapply(1:length(dat), function(i){ 
if(length(dat[[i]][[4]])>1){ 
t.test(newdata$Price,dat[[i]][[4]])$p.value 
}else 'not enough observation' 
}) 

내 코드 기본적으로 'newdata'의 데이터와라는 다른 데이터 세트 사이에 t.test는 않습니다 'dat' 내가,868이없는 때 시간이있다30에서 50 위의 예제 데이터와 유사합니다. 그래서 내 코드가 오류를 반환하는 대신 어떻게 변경하여 NA을 반환 할 수 있습니까?

+1

'dat'은 무엇입니까? 오타가 무엇입니까? '뉴 데이터 '를 의미합니까? – agstudy

답변

3

이미 if/else 구조를 사용하는 방법을 알고 있습니다. 당신은 대신 목록의 숫자 벡터를 얻을 수 sapply(...) 또는 vapply(..., numeric(1))lapply(...)을 대체 할 수

newdata <- subset(data, Random >= 30 & 
         Random < 50) 
Pvalue <- lapply(dat, function(x){ 
    if (length(x[[4]]) > 1 & nrow(newdata) > 1) { 
    t.test(newdata$Price, x[[4]])$p.value 
    } else NA 
}) 

: 당신이 할 수있는 일은 다음과 같이 모두를 결합 어쩌면 테스트 nrow(newdata)를 추가하거나입니다. 이를 위해 'not enough observation'NA으로 바꾸거나 문자 벡터로 끝낼 수도 있습니다.

+0

왜 nrow (newdata)> 0이 아닌가요? t.test ..에서 충분한 관찰을 얻으려면 ..? – agstudy

+0

예. 나는 당신이 적어도 2 x와 2 y가 필요하다고 생각합니다. – flodel

+0

+1. 맞습니다. 't.test'의 코드에서 이걸 얻습니다.이 경우 (nx <1 || (! var.equal && nx <2)) .. – agstudy

관련 문제