使用R求和数字的函数



我在RStudio工作,并试图开发一个函数,将任何整数值的数字相加。

我只能成功地开发一位数和两位数的函数,但当我开始添加例如12345时,函数就不起作用了。

有人能告诉我我缺了什么吗?

我的示例代码如下:

myfunction2 <- function(input) {
if(input < 10) {
return(input)
} else {
return(sum((input%%10) + floor(input/10)))
}

如果我输入33等等,这个函数将返回6,但当我像123一样将位数增加到3时,它会破坏

一个无循环选项是使用splitstackshape包中的cSplit将数字分离为一个向量,每个字符有一个元素,然后将向量中的所有元素相加。这适用于1(single_num(或many数字。

library(splitstackshape)
single_num <- 17692
many <- c(12345, 678910, 222, 10, 7099998)
sums <- function(vec) {
print(rowSums(cSplit(as.data.frame(vec),1, sep = '', stripWhite = FALSE), na.rm = T))
}
sums(single_num)
==> 25
sums(many)
==> 15 31 6 1 51
  • 安装并加载splitstackshape包
  • 转换给定给数据帧的值或向量
  • 在带有空分隔符的列1上使用cSplit函数,为每个字符创建一个带有df的列(由cSplit自动添加的colname(
  • 计算每行的总和并打印

如果你输入一个数字,就会有一行和一个结果,而如果你输入多个数字的向量,就会有那么多行和结果。

当您输入具有不同字符数的值时,需要na.rm = T,因为否则较短的值将在后面的列中以NA结尾,rowSums()将返回NA。

library(stringr)
myfunction2 <- function(inp) {
if (inp < 10) {
return(inp)

} else{
input_str = toString(inp)
input_split = str_split(input_str, '')[[1]]
mysum = 0
for(i in 1:length(input_split)){
mysum = mysum + as.numeric(input_split[i])
}
return(mysum)
}
}

最新更新