J'ai la fonction suivantevectoriser une fonction R
f <- function(x){sum(g(x - X))}
où
X - n-dimensional vector with some data
g is some vecrtorized function
Comment puis-je vectoriser la fonction f
afin qu'il puisse prendre d'entrée n dimensions et le rendement de sortie n dimensions?
je tentais les éléments suivants
rowSums(sapply(x, "-", X))
Le problème avec cette approche est qu'elle ne couvre pas le cas d'une dimension x
. Est-il possible de couvrir les deux cas? Par exemple nous
x <- c(1,2,3)
X <- c(6,9,1)
g <- function(x){x^2}
Si je sapply
le code à base je reçois la réponse correcte (vecteur n dimensions)
rowSums(sapply(x, "-", X))
[1] -12 -21 3
Mais si je mets x=1
et exécuter le même code, je reçois le mauvais réponse (vecteur n dimensions au lieu de scalaire)
rowSums(sapply(x, "-", X))
[1] -5 -8 0
Ce n'est pas surprenant, puisque rowSums
appliqué à la colonne vecteur donne le vecteur de colonne. Ce dont j'ai besoin dans le cas de unidimensionnelle, cependant, est d'appliquer sum
. Existe-t-il un moyen élégant de le faire sans utiliser le if
sous réserve de dimensions?
Vous devriez probablement ajouter un exemple d'entrée/sortie pour les deux cas dont vous parlez. – Dason
'sapply' n'est pas vraiment vectorisant, c'est juste une boucle for déguisée. Il me semble que vous voulez peut-être «externe», mais comme Dason dit que la sortie prévue aiderait. – baptiste
Votre terminologie est confuse pour moi. Vous avez seulement montré 'x' et' X' qui sont unidimensionnels. Et je pense que "vecteur" signifie unidimensionnel. Parlez-vous de tableaux (dimensions supérieures) ou de vecteurs de longueur supérieure à 1? – Frank