Ziffernsummenfunktion in R

8

Ich suchte nach der recht grundlegenden numerischen Funktion Ziffernsumme in R.

  • Ich habe keine vorinstallierte Funktion gefunden.
  • Sogar in Stackoverflow's umfangreiche R-Bibliothek Ich habe keinen Datensatz gefunden.

Deshalb habe ich versucht, mit folgender Funktion zu enden:

%Vor%

Ich arbeite, aber ich kämpfe immer noch mit zwei Fragen:

  1. Gibt es wirklich in Plain R keine Funktion für Ziffernsumme?
  2. Gibt es eine klügere Möglichkeit, diese Funktion zu programmieren?
user2030503 07.09.2013, 16:10
quelle

3 Antworten

12

Das sollte besser sein:

%Vor%     
Julius 07.09.2013, 16:35
quelle
5

Ich habe mich gefragt, welche der drei vorgeschlagenen Methoden (plus eine vierte) am schnellsten ist, also habe ich ein Benchmarking durchgeführt.

  1. digitsum1 <- function(x) sum(as.numeric(unlist(strsplit(as.character(x), split = ""))))

  2. digitsum2 <- function(x) sum(floor(x / 10^(0:(nchar(x) - 1))) %% 10)

  3. Verwendung der Funktion digitsBase aus dem Paket GLDEX:

    %Vor%
  4. Basierend auf einer Funktion von Greg Snow in der R-Hilfe-Mailingliste :

    digitsum4 <- function(x) sum(x %/% 10^seq(0, length.out = nchar(x)) %% 10)

Benchmark-Code:

%Vor%

Benchmark-Ergebnisse:

%Vor%

Variante 2 ist etwas schneller als Variante 1, während Varianten 4 und 3 viel langsamer sind. Obwohl der Code von Variante 4 der Variante 2 ähnlich zu sein scheint, ist Variante 4 weniger effizient (aber immer noch besser als Variante 3).

Die vollständigen Benchmark-Ergebnisse (einschließlich Grafiken) finden Sie auf github .

    
Uwe 29.03.2016 00:40
quelle
4

Ich bin nicht sicher, warum Sie denken würden, dass es eine eingebaute Funktion dafür geben würde. Es ist nicht wirklich eine statistische Operation. Mehr von einer Zahlentheorie. (Es gibt viele Beispiele, die bei einer Suche im Rhelp-Archiv gefunden werden können. Ich verwende %Vor%     

42- 07.09.2013 16:29
quelle

Tags und Links