R中数字的加权和

时间:2018-05-04 17:24:48

标签: r string

我试图找出一种最有效的方法来计算数字字符串的加权数字加权(其中权重等于数字字符串中数字的位置)。

示例:对于数字1059,加权的数字总和计算为1 * 1 + 0 * 2 + 5 * 3 + 9 * 4 = 52

我想允许输入具有任何长度,但是如果有更有效的方式,当字符串长度有限制时(例如,知道数字不再是10位数允许更高效的程序我也对此持开放态度。此外,如果输入的类型为numeric而非character,则也是可接受的。

我现在拥有的是一个老式的循环:

wsod <- function(str) {
  output <- 0
  for (pos in 1:nchar(str)) {
    digit <- as.numeric(substr(str, pos , pos))
    output <- output + pos * digit
  }
  output
}
已经为Python提出了{p> A few solutions(使用数字输入),但我不认为它们直接适用于R.

2 个答案:

答案 0 :(得分:4)

> number <-  1059
> x <- strsplit(as.character(number), "")[[1]] 
> y <- seq_len(nchar(number))
> as.numeric(as.numeric(x) %*% y)
[1] 52

答案 1 :(得分:2)

weighted.digit <- function(str) {
  splitted.nums <- as.numeric(strsplit(str, '')[[1]])
  return(sum(splitted.nums * 1:length(splitted.nums)))
}

weighted.digit('1059')

[1] 52

可以修改它以接受数字输入,然后只需将其转换为字符作为第一步。