2017-03-21 6 views
0

숫자 세트와 주어진 평균값이 있습니다. 나는 그 숫자들의 조합을 찾는 가장 효율적인 방법을 찾아야한다. 그것은 목표를 의미 할 것이다. 대상을 의미하는 숫자 조합을 모두 찾으십시오.

numbers<-c(8.05,7.59,5.52,6.73,8.01,7.44,7.35,7.42,6.05) 
target_mean<-7.34 

나는 숫자의 모든 가능한 조합을 생성하는 combn 기능 ( combinat 패키지)를 사용하여 한 다음 모든 수단을 찾아 내 목표와 일치하는 의미있는 것을보고 생각했다,하지만 난 궁금 해요 더 좋은 방법이 있습니다. 문제는 그 숫자 중 몇 개가 내 목표를 이루는 지 모르겠습니다.

+1

부동 숫자 비교가 내가 찾던거야 그 – akrun

답변

3

Akrun이 언급했듯이 부동 소수점 숫자를 정확하게 일치시키는 것은 쉽지 않습니다. 그러나 여기에 평균과의 조합을 찾는 방법 +/- 0.01을 대상 위와 아래의 :

target_mean<-7.34 
numbers<-c(8.05,7.59,5.52,6.73,8.01,7.44,7.35,7.42,6.05) 
res <- Map(combn, list(numbers), seq_along(numbers), simplify = FALSE) 
res2 <- unlist(res, recursive = FALSE)[lapply(unlist(res, recursive = FALSE),mean)<(target_mean+.01)& 
lapply(unlist(res, recursive = FALSE),mean)>(target_mean-.01)] 

res2 
[[1]] 
[1] 8.05 7.59 5.52 8.01 7.44 7.42 

[[2]] 
[1] 8.05 7.59 5.52 8.01 7.44 7.35 7.42 

sapply(res2,mean) 
[1] 7.33833 7.34000 
+0

주의해야합니다. 감사! – Liza