我在R中寻找非常基本的数字函数digit sum。
因此,我试着用以下功能结束:
# Function to calculate a digit sum
digitsum = function (x) {sum(as.numeric(unlist(strsplit(as.character(x), split="")))) }
我工作,但我仍然在努力解决两个问题:
答案 0 :(得分:15)
这应该更好:
digitsum <- function(x) sum(floor(x / 10^(0:(nchar(x) - 1))) %% 10)
答案 1 :(得分:5)
我想知道三种建议方法中的哪一种(加上第四种方法)是最快的,所以我做了一些基准测试。
$timeout(function(){
var ele = document.getElementById("myid");
ele.value = 999;
$scope.testForm.anim.$setViewValue(ele.value);
},5000);
digitsum1 <- function(x) sum(as.numeric(unlist(strsplit(as.character(x), split = ""))))
使用GLDEX包中的函数digitsBase:
digitsum2 <- function(x) sum(floor(x / 10^(0:(nchar(x) - 1))) %% 10)
基于Greg Snow在github中的功能:
library(GLDEX, quietly = TRUE)
digitsum3 <- function(x) sum(digitsBase(x, base = 10))
基准代码:
digitsum4 <- function(x) sum(x %/% 10^seq(0, length.out = nchar(x)) %% 10)
基准测试结果:
library(microbenchmark, quietly = TRUE)
# define check function
my_check <- function(values) {
all(sapply(values[-1], function(x) identical(values[[1]], x)))
}
x <- 1001L:2000L
microbenchmark(
sapply(x, digitsum1),
sapply(x, digitsum2),
sapply(x, digitsum3),
sapply(x, digitsum4),
times = 100L, check = my_check
)
变体2比变体1略快,而变体4和3则慢得多。虽然变体4的代码似乎与变体2类似,但变体4效率较低(但仍然优于变体3)。
完整的基准测试结果(包括图表)位于{{3}}。
答案 2 :(得分:4)
我不确定为什么你会认为会有一个内置函数来做到这一点。这不是一个统计操作。更多的理论类程序。 (通过搜索Rhelp Archives可以找到很多例子。我使用Markmail就可以了,但是还有其他搜索引擎,如RSeek,GMane和Newcastle网页。你的功能需要一系列的数字并返回一个数字,它是所有数字的总和。如果这是目标,那么它看起来设计合理。我猜想有人会想要每个数字的数字总和:
sapply( c(1,2,123),
function(x) sum( as.numeric(unlist(strsplit(as.character(x), split=""))) ))
[1] 1 2 6
pkg:GLDEX中有一个“数字化”的funciton digitsBase,您可以用该函数替换as.numeric(unlist(split(as.character(x),“”))):
digitsBase(x, 10)
答案 3 :(得分:0)
我如何找到R中的数字之和:
.grid_image {
width:100%;
height:100%;
object-fit:cover;
->transition:0.5s ease-in; or transition:all 0.5s ease-in;
}
.grid_item:hover .text {
display: block;
/*text to see, otherwise hides in the back */
z-index: 999;
->animation : slide 0.7s ease-in;
}
@keyframes slide {
0%{
top:-100px;
}
75% {
top: -25px;
}