Je veux écrire quelques fonctions de manipulation de matrices en C, puis les passer à R, où la matrice sera fournie par R, et obtenir les résultats des manipulations. J'ai une fonction de test comme indiqué ci-dessous (s'il vous plaît, ne vous souciez pas de ce qu'elle fait, dans mes fonctions originales, j'aurai besoin de choisir un élément aléatoire de chaque ligne, et de faire quelques calculs sur eux, et de retourner un tableau composé de ces éléments choisis au hasard de chaque ligne, en d'autres termes, je dois avoir deux boucles for pour passer par tous les éléments de la matrice).
void multMat(double **A, int *r, int *c, double *s)
{
int i, j;
for (i = 0; i < *r; ++i)
{
for (j = 0; j < *c; ++j)
{
if (j == 5)
s[i] = A[i][j] * A[i][0];
}
}
}
Je l'ai compilé avec R CMD SHLIB multMat.c
et il produit multMat.so
pour moi. Ensuite, du côté R, j'ai quelque chose comme ça :
dyn.load("multMat.so")
multMat <- function(A)
{
.C("multMat", A=as.double(A), r=as.integer(nrow(A)), c=as.integer(ncol(A)), s=as.double(nrow(A)))
}
Ensuite, j'ai créé une matrice de test comme dans R Studio et j'ai appelé cette fonction :
A <- matrix(1:100, 10, 10)
multMat(A)
Le problème est que lorsque j'exécute cette fonction, R Studio se plante. Je suppose qu'il y a un problème avec la façon dont la fonction C est définie. Avez-vous une idée ?