En raison de la façon dont les objets table
de Matlab traite les contenus données, il essaie d'être intelligent avec les types de données. Occasionnellement, lorsque les choses essaient d'être intelligentes dans les coulisses, elles se déclenchent d'une manière qui n'est pas nécessairement évidente pour l'utilisateur.
Qu'est-ce qui se passe ici est que, puisque votre colonne c
est créée avec un tableau de caractères, MATLAB tente de garder cette colonne homogène et de concaténer 'a'
avec 'aa'
. Cela entraînera une erreur en raison de la manipulation par MATLAB de character arrays comme matrices de caractères, qui est livré avec une mise en application de taille: toutes les lignes doivent avoir le même nombre de colonnes.
Vous avez quelques options: utilisez un string array (introduit dans R2016b) ou utilisez un cell array. Alors que les tableaux de chaînes sont essentiellement des tableaux de cellules sous le capot, ils ont l'avantage de méthodes de chaînes dédiées, vous permettant d'effectuer nativement diverses opérations de chaînes sans avoir besoin d'indexer explicitement dans un tableau de cellules.
Pour changer votre code, il suffit d'utiliser des guillemets doubles (""
) au lieu de guillemets simples (''
):
a = table();
a.c = "a";
b = table();
b.c = "aa";
T = [a;b]
qui retourne:
T =
2×1 table
c
____
"a"
"aa"
Vous pouvez forcer explicitement le type de c
en tant que matrice de cellules:
a = table();
a.c = {'a'};
b = table();
b.c = 'aa';
T = [a; b]
Qui rend la même chose.
Les tableaux simples ne gèrent pas les chaînes de différentes longueurs. Essayez d'utiliser des tableaux de cellules. – Nivi
'a = table(); a.c = {'a'; 'aa'} 'le ferait, ou' a = table(); a.c = {'a'}; a.c (fin + 1,1) = {'aa'}; 'ajouter à la fin – Wolfie
@Wolfie Merci beaucoup! Ça marche ! S'il vous plaît convertir un commentaire pour répondre - Je vais l'accepter. (Je connais la première façon - ac = {'a'; 'aa'} - mais dans mon cas je ne peux pas l'utiliser car il est en boucle et ne sait pas {'a'; 'aa'} à l'avance, mais le OKAY!) –