0
votes

Comment éviter la boucle de * multiplication de plusieurs lignes dans le cadre de données

Cela devrait être simple. A est un cadre de données. J'essaie de calculer un [1,] * A [2,] * A [3,] *** tout en bas. Y a-t-il un moyen de le faire sans boucles? Merci d'avance!


1 commentaires

Vous pouvez utiliser appliquer avec l'argument marge est 2


3 Réponses :


3
votes

Nous pouvons utiliser sapply pour prendre la colonne-wise produit xxx

ou colProds de matrixstats < / p> xxx

Data xxx


0 commentaires

3
votes

Tout d'abord, laissez-nous créer des données avec: xxx

a est une matrice (qui est nécessaire pour les opérations matricielles de matrixststats :: ColProds et rfast :: ColProds ). B est juste la même matrice que A data.frame à utiliser avec SAPPLY. La pertinence de chaque méthode dépend évidemment de votre cas d'utilisation.

@ronak Shah a proposé les deux méthodes suivantes xxx

@ DC37 proposé cela dans le commentaire à Votre message d'origine xxx

Une troisième solution serait d'utiliser le package rfast . xxx

Nous pouvons comparer chaque approche pour voir comment ils effectuent: xxx

Nous voyons que appliquer () et matrixstats :: colprods () sont plus lents que les solutions fournies par sapply () et rfast :: colprods () . Si vous ne faites que faire l'opération une fois, cela n'a pas d'importance, mais si vous le faites plusieurs fois (par exemple à l'intérieur d'une boucle ou une fonction à optimiser), les différences de temps pourraient s'ajouter. xxx


0 commentaires

2
votes

une option avec sommarise_all à partir de dplyr xxx

données xxx


0 commentaires