我正在嘗試撰寫一個基于 Luhn 演算法(mod 10 演算法)的函式,我需要一個函式來分別對我的數字向量中所有大于 9 的整數求和。例如,10 的總和應為 1 0=1,而 19 的總和應為 1 9=10。示例代碼:
nmr <- ("1_9_8_2_0_5_0_1_3_3_4_8")
nmr <- strsplit(nmr, "_")
nmr <- as.numeric(as.character(unlist(nmr[[1]])))
luhn_alg <- c(0,0,2,1,2,1,2,1,2,1,2,0)
x <- nmr*luhn_alg
x
[1] 0 0 16 2 0 5 0 1 6 3 8 0
sum(x)
[1] 41
我不希望 x 的總和等于 41。相反,我希望總和等于:0 0 1 6 2 0 5 0 1 6 3 8 0=32。我嘗試了 for 回圈,但似乎沒有做對。任何幫助深表感謝。
uj5u.com熱心網友回復:
您可能需要在將資料與 相乘后再次拆分資料luhn_alg。
Luhn_sum <- function(x, y) {
nmr <- as.numeric(unlist(strsplit(x, "_")))
x1 <- nmr*y
x1 <- as.numeric(unlist(strsplit(as.character(x1), '')))
sum(x1)
}
nmr <- ("1_9_8_2_0_5_0_1_3_3_4_8")
luhn_alg <- c(0,0,2,1,2,1,2,1,2,1,2,0)
Luhn_sum(nmr, luhn_alg)
#[1] 32
uj5u.com熱心網友回復:
您可以使用substring和seq來創建一位數的向量,然后您只需要對它們進行求和:
sum(
as.numeric(
substring(
paste(x, collapse = ""),
seq(1, sum(nchar(x)), 1),
seq(1, sum(nchar(x)), 1)
)
)
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/329326.html
