2015-07-25 20 views
6

Ich versuche eine Funktion in R zu schreiben, die jede dritte Zahl in [1.100] drucken wird; Dies ist, was ich versucht habe, aber das erzeugt nicht jede dritte Zahl, es produziert jede ZahlWie schreibe ich eine R-Funktion oder Schleife, die jede dritte Zahl oder n-te Zahl in [1, 100] ausgibt?

x <- c(100) 
question.1 <- function (x){ 
out <- seq(x) 
return(out) 
} 
question.1(x) 

Fehle ich etwas? Jede Hilfe, die Sie anbieten können, wäre sehr willkommen!

+3

die Antwort unten oder 'seq (3,100,3)' oder '(1: 100) [1: 100 %% 3 == 0]' und was hat Sie denken Dies würde nur jede dritte Zahl erzeugen? – rawr

+1

siehe "fizzbuzz" auf dem "net –

Antwort

4

Verwenden Indizierung mit [ und dem Recycling von kurzen Vektoren:

seq(100)[c(F,F,T)] 
## [1] 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 
1

Gerade Matthew-Lösung in einer allgemeinen n-te Funktion Verpackung:

nth <- function(x, n) x[c(rep(FALSE, n-1), TRUE)] 

nth(1:100, 5) 

# [1] 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 

Oder sogar einen Operator-Stil mit:

`%nth%` <- function(x, n) x[c(rep(FALSE, n-1), TRUE)] 

seq(100) %nth% 5 
4

Verwenden Sie den Modulo-Operator (%%), um jeden n-ten Wert von 1: 100 wie folgt zu erhalten:

nth <- function(x,n){ 
    x[x%%n==0] 
} 

Zum Beispiel:

x <- 1:100 
nth(x,7) 
[1] 7 14 21 28 35 42 49 56 63 70 77 84 91 98 
2

Excellent Antworten wurden bereits gebucht; dies ist nur eine weitere einfache Alternative:

start <- 1 # defines the initial number you want to select 
step <- 3 # difference between subsequent numbers 
seq(start, 100, by=step) 
#[1] 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100 
+0

Dies ist die offensichtliche Alternative für eine regelmäßige Sequenz, aber wenn der Vektor nicht sortiert ist und Sie nicht sortieren können, dann würde es nicht funktionieren. – Molx

+0

@Molx Vielen Dank für Ihren Kommentar. Obwohl ich Ihrer Aussage zustimme, verstehe ich die Kritik in diesem speziellen Fall nicht. Das OP sucht nach einer Lösung, die "jede dritte Zahl in [1.100] drucken wird", und ich denke, dass genau das mit diesen drei Zeilen erreicht werden kann (die auch als eine einzige Zeile geschrieben werden könnten). – RHertel

+0

Ich glaube, dass die Frage anders formuliert worden wäre, wenn das OP versucht hätte, eine bestimmte Teilmenge mit der Größe 1/3 aus einer gegebenen, unsortierten Menge von Zahlen zwischen 1 und 100 zu extrahieren. – RHertel

Verwandte Themen