considérer que j'ai suivi matricielle je veux juste trouver le dernier élément, c'est-à-dire comme ça La colonne matricielle et la taille de la ligne sont dynamiques, nous ne pouvons pas le calculer à Comment puis-je obtenir la valeur du dernier élément? P> Actuellement, j'ai fait à l'aide du code ci-dessous p> existe un meilleur moyen de le faire? P> p> m [3, 3] code> p>
M [3, 3] Code> P>
3 Réponses :
une matrice en r est juste un vecteur avec un attribut si mentionné (comme mentionné par @James) Votre solution pourrait être plus générale au cas où vous voulez vous garder la structure matricielle, comme vous pouvez ajouter cependant, Ma solution pourrait également être modifiée de la même manière à l'aide de la fonction DIM code>, afin que vous puissiez simplement le sous-ensemble comme un
drop = false code> p>
Dim Fonction de remplacement P>
M <- matrix(runif(1000000),nrow=1000)
microbenchmark(
nrow_ncol={
M[nrow(M),ncol(M)]
},
dim12={
M[dim(M)[1],dim(M)[2]]
},
length1={
M[length(M)]
},
tail1={
tail(c(M),1)
},
times = 1000
)
# Unit: nanoseconds
# expr min lq mean median uq max neval cld
# nrow_ncol 605 1209 3799.908 3623.0 6038 27167 1000 a
# dim12 302 605 2333.241 1811.0 3623 19922 1000 a
# length1 0 303 2269.564 1510.5 3925 14792 1000 a
# tail 1 3103005 3320034 4022028.561 3377234.0 3467487 42777080 1000 b
Mais la méthode proposée par OP est parfaitement correcte et est légèrement moins obscurcissant l'intention.
@Roland je suis d'accord c'est "ok" mais je pense que op ne réalise pas qu'il ne traite qu'un vecteur et sa chose importante à réaliser lorsqu'il s'agit de matrices dans R.
Sûr. Mon commentaire était simplement un addenda. J'ai déjà évoqué (et je préparais la même réponse).
Avec la méthode d'indexation de vecteur, vous ne pouvez pas éviter de laisser tomber la classe matricielle, ce qui peut être important.
@James m [nrow (m), ncol (m)] code> tomber aussi comme pour
attributs (m [nrow (m), ncol (m)]) code>, donc Pas sûr de ce que vous voulez dire. Il semble également que l'OP ne veut que la valeur, pas la structure, le lire sinon?
Vous pouvez ajouter goutte = false code> à la version multidex de
[ code>, mais pas à l'index unique.
@James, mais la sortie sera différente de ce que OP a demandé. J'ai envie de surcharger cela, bien que cela puisse être ajouté à la réponse si vous insistez. BTW, l'attribut Dim code> peut être ajouté ultérieurement si nécessaire.
@Davidarenburg - Benchmark indique clairement que je peux aller de l'avant et utiliser m [longueur (m)]. Merci beaucoup
@Samuelalexander qu'est-ce que vous allez faire avec toutes ces microsecondes que vous allez enregistrer par rapport à votre méthode?
@Roland Je veux juste trouver si la méthode que j'utilise est la bonne façon. Bien que la différence soit dans les microsecondes, je suis sûr que j'utilise la bonne méthode pour trouver le dernier élément.
@Samuelalexander Il n'y a pas de "droit" ici. Toutes les méthodes peuvent être utilisées et trois d'entre elles ont la même performance pour à peu près tous les objectifs.
Je préférerais faire:
C'est aussi une bonne solution, mais vous devez expliquer que C code> supprime tous les attributs (y compris l'attribut
DIM code>) et contrainte ainsi la matrice dans un vecteur atomique.
as.vector code> est généralement préférable pour cela (je me souviens d'une citation de B. Ripley à ce sujet).
intéressant, n'a pas encore expérimenté le licenciement des attributs entre C code> et
as.vector code>
AS.Vector code> supprime également tous les attributs si le résultat est atomique. La raison de l'utilisation est que le code est plus clair.
@Roland Le problème principal avec cette méthode est que C code> crée une copie de la matrice entière que vous pouvez valider avec
tracemem code>. Bien que l'avantage soit qu'il est plus flexible lorsque nous voulons choisir plus d'une valeur.
Un moyen de le faire et d'éviter une répétition inutile du nom d'objet (ou des fautes de frappe idiotes) serait d'utiliser des tuyaux. Aime ceci:
require(magrittr) M %>% .[nrow(.), ncol(.)] ##[1] 9 M %>% `[`(nrow(.), ncol(.)) ##[1] 9 M %>% extract(nrow(.), ncol(.)) ##[1] 9