365 Stimmen

Wie kann man auf den letzten Wert eines Vektors zugreifen?

Angenommen, ich habe einen Vektor, der in einem Datenrahmen eine oder zwei Ebenen verschachtelt ist. Gibt es einen schnellen und schmutzigen Weg, um auf den letzten Wert zuzugreifen, ohne die length() Funktion? Etwas ala PERL's $# besondere var?

Ich hätte also gerne etwas wie:

dat$vec1$vec2[$#]

anstelle von

dat$vec1$vec2[length(dat$vec1$vec2)]

20voto

scuerda Punkte 515

Ich habe diese beiden Ansätze mit dem folgenden Code an einem Datenrahmen mit 663.552 Zeilen getestet:

system.time(
  resultsByLevel$subject <- sapply(resultsByLevel$variable, function(x) {
    s <- strsplit(x, ".", fixed=TRUE)[[1]]
    s[length(s)]
  })
  )

 user  system elapsed 
  3.722   0.000   3.594 

y

system.time(
  resultsByLevel$subject <- sapply(resultsByLevel$variable, function(x) {
    s <- strsplit(x, ".", fixed=TRUE)[[1]]
    tail(s, n=1)
  })
  )

   user  system elapsed 
 28.174   0.000  27.662 

Wenn Sie also mit Vektoren arbeiten, ist der Zugriff auf die Längenposition wesentlich schneller.

12voto

James Punkte 63228

Eine andere Möglichkeit besteht darin, das erste Element des umgekehrten Vektors zu nehmen:

rev(dat$vect1$vec2)[1]

11voto

Akash Punkte 173

Ich habe eine andere Methode, um das letzte Element eines Vektors zu finden. Angenommen, der Vektor ist a .

> a<-c(1:100,555)
> end(a)      #Gives indices of last and first positions
[1] 101   1
> a[end(a)[1]]   #Gives last element in a vector
[1] 555

Na also!

11voto

Paket data.table enthält last Funktion

library(data.table)
last(c(1:10))
# [1] 10

8voto

Kurt Ludikovsky Punkte 660

Worüber

> a <- c(1:100,555)
> a[NROW(a)]
[1] 555

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X