Limite de longueur de chaîne utilisée dans le récapitulatif du tableau et dans Sélectionner les lignes en doubleCeci est un FYI, et peut-être une question aussi.
Un client a demandé aujourd'hui s'il y avait une limite sur la longueur de chaîne utilisée pour juger si les lignes sont des doublons, ou lors de la création d'un résumé de table.Elle avait des chaînes de 8 000 caractères dans une seule cellule.(Il s'agissait de données sur les marqueurs génétiques.) Elle voulait voir combien de vrais doublons elle avait dans une colonne de données.Ni l'un ni l'autre ne signalaient les lignes correctes.Elle soupçonnait un problème de longueur de corde.
J'ai fait quelques comparaisons de force brute et j'ai constaté que seuls les 2000 premiers caractères sont comparés lors de la création du résumé du tableau ou de la sélection des lignes en double.
J'ai également trouvé que faire quelque chose comme "if (col1 == col2," Match "," No Match ") n'a pas la limite de 2000 caractères.(En d'autres termes, la chaîne entière (au moins jusqu'à 8000 caractères) semble être utilisée dans la comparaison.)
Je ne connais pas les autres fonctions.
C'est donc une comparaison pour info à faire attention de longues chaînes ... et une question: est-ce que quelqu'un sait pourquoi on limite à 2000 caractères dans ces cas?
Re: Limite de la longueur de chaîne utilisée dans le récapitulatif du tableau et dans Sélectionner les lignes en doubleSalut Jerry,
Je spécule ici, mais je pense que ce que fait votre client avec le résumé du tableau ou la sélection des lignes en double est inapproprié.Pouvez-vous nous donner plus de détails? S'agit-il d'un code génétique de 8 000 caractères et composé uniquement de A, C, G et Ts? Si tel est le cas, ce serait une approche inappropriée.On dirait qu'ils essaient de mettre une cheville carrée dans un trou rond.
S'ils veulent vraiment utiliser JMP pour cela, il serait préférable de créer une seule colonne de chaque caractère, puis de rechercher des doublons entre les lignes.
Plus important est leur objectif. Pourquoi recherchent-ils des doublons?
Re: Limite de la longueur de chaîne utilisée dans le récapitulatif du tableau et dans Sélectionner les lignes en doubleBon point Chris.Oui, ils examinent les chaînes ACGT.Mon impression est qu'elle avait 2000 groupes de 4 caractères, tous enchaînés dans une chaîne de 8000 caractères.Elle n'a pas donné plus de détails en dehors de vouloir comparer une chaîne de 8000 caractères à une autre et rechercher des doublons.
Comme je ne sais pas sur les chaînes ACGT et comment elles sont utilisées, je ne savais pas à ce sujet.(Cependant, j'en savais assez pour reconnaître qu'elle pourrait être intéressée par JMP Genomics.Auparavant, ils n'étaient pas au courant de JMPG, mais ils grignotent maintenant!)
Je vais demander ce qu'elle essaie de faire.Appréciez les commentaires!
Jerry
Re: Limite de la longueur de chaîne utilisée dans le récapitulatif du tableau et dans Sélectionner les lignes en doubleIntéressant. Il semble que le client ait raison.
dt1=New Table( "2000 characters",
Add Rows( 2 ),
New Column( "Column 1",
Character,
"Nominal",
Formula(
If( Row() == 1,
Repeat( "A", 1999 ) || "1",
Repeat( "A", 1999 ) || "2"
)
),
)
);
//this summary table will have two rows
dt1<< Summary(
Group( :Column 1 ),
Freq( "None" ),
Weight( "None" )
);
dt2=New Table( "2001 characters",
Add Rows( 2 ),
New Column( "Column 1",
Character,
"Nominal",
Formula(
If( Row() == 1,
Repeat( "A", 2000 ) || "1",
Repeat( "A", 2000 ) || "2"
)
),
)
);
//this summary table will have only one row
dt2<< Summary(
Group( :Column 1 ),
Freq( "None" ),
Weight( "None" )
);
je parie @chungwei aura un aperçu.
Re: Limite de la longueur de chaîne utilisée dans le récapitulatif du tableau et dans Sélectionner les lignes en doubleBien sûr, Jerry!
Il existe d'autres outils simples (comme le code JSL que vous avez utilisé) qui peuvent rechercher de longues piqûres à des fins de comparaison. Il est particulièrement intéressant de noter que non seulement les mêmes caractères dans la chaîne ont la même longueur, mais aussi l'ordre dans lequel ils se trouvent. Véritables doublons dans le caractère et l'ordre d'apparition de ces caractères.
Cependant, si chaque caractère (base / marqueur dans ce cas) était dans sa propre colonne et que toutes ces colonnes étaient sélectionnées pour être utilisées pour sélectionner les lignes en double ou le résumé du tableau devrait fonctionner (mais cela peut être lent).
Il s'agit généralement d'un problème de bioinformatique et les gens peuvent écrire du code pour le résoudre.
Re: Limite de la longueur de chaîne utilisée dans le récapitulatif du tableau et dans Sélectionner les lignes en doublePour ce que cela vaut, les formules de colonne semblent comparer des chaînes au moins aussi grandes que 8K caractères.
Le script ci-dessous identifie les 27 lignes sur 30 qui sont des doublons de chaînes de 3 8001 caractères différant uniquement sur le dernier caractère.
Names Default To Here(1);
a = repeat("0", 8000);
x = a ||"X";
y = a || "Y";
z = a || "Z";
vals = {x,y,z};
lis = {};
for(i=1, i<=30, i++,
insertinto(lis, eval(vals[randominteger(3)]));
);
dt = new table("xx", <<NEW column=""></NEW>Re: Limite de la longueur de chaîne utilisée dans le récapitulatif du tableau et dans Sélectionner les lignes en doubleMerci a tous.@brady_brady et @Jeff_Perkinson , votre analyse est plus élégante que ce que j'ai fait, mais nous sommes arrivés à la même conclusion ... Limite de 2000 caractères sur le résumé de la table et sélectionnez les lignes en double, mais les formules semblent reconnaître tous les caractères.
Espérant @chungwei aura des informations supplémentaires, peut-être plus de fonctions qui ont cette limitation?
Re: Limite de la longueur de chaîne utilisée dans le récapitulatif du tableau et dans Sélectionner les lignes en doubleOn dirait que c'est un problème, à plusieurs endroits, résumé, filtre de données, distribution.
Peut-être que dans plus d'endroits, je n'ai pas vérifié tous les endroits qui classent les données de colonne.
Il est un bug .