2017-11-25 101 views
1

我有兩個向量,我想知道向量b的哪個值使a的每個元素的和(a-b)最小。我想要的輸出是一個長度爲a的矢量,其中包含向量b的值。尋找減去兩個向量的每個元素的最小值

a <- c(1, 3, 5, 7, 9, 12, 19, 25, 80) 
b <- c(2, 9, 8.4, 7, 66, 32, 19, 4) 

我曾嘗試 -

closest_longitude <- function (x, y) { 
which.min(x - y) 
} 

closest_value <- sapply(a, closest_longitude, b) 

但結果是官樣文章。

所有幫助非常感謝。

+0

您是否意味着'總和(AB)'或'只是ab' – akrun

+0

只是AB,所以輸出應該是一個矢量相同的長度爲a,含有值b –

+0

也許'which.min(abs(xy))' – akrun

回答

1

我們可能要在這裏考慮abs在功能closest_longitude

closest_longitude <- function (x, y) { 
     which.min(abs(x - y)) 
} 

sapply(a, closest_longitude, b) 
#[1] 1 1 8 4 2 2 7 7 5 

如果我們不使用abs,它永遠是5

sapply(a, closest_longitude, b) 
#[1] 5 5 5 5 5 5 5 5 5 

,因爲第5 'b'中的元素爲66,它將給出最低的負值,同時減去'a'中的每個元素並導致選擇。

+1

謝謝,已經解決了。 –

0

這裏是「強力」算法

# 1. Vectors 
a <- c(1, 3, 5, 7, 9, 12, 19, 25, 80) 
b <- c(2, 9, 8.4, 7, 66, 32, 19, 4) 
# 2. Init settings 
sum_a_i_b_i_min <- Inf 
a_i_min <- 0 
b_i_min <- 0 

# 3. Calculations 
for(a_i in a){ 
    for(b_i in b){ 
    if(sum(a_i - b_i) < sum_a_i_b_i_min){ 
     sum_a_i_b_i_min <- sum(a_i - b_i) 
     a_i_min <- a_i 
     b_i_min <- b_i 
    } 
    print(paste0(a_i, " : ", b_i, " : ", sum(a_i - b_i))) 
    } 
} 
# 4. Result 
print(paste0("a_i_min = ", a_i_min, "/b_i_min = ", b_i_min, 
     "/sum(a_i_min - b_i_min) = ", sum_a_i_b_i_min))