Limite alla lunghezza della stringa utilizzata in Riepilogo tabella e in Seleziona righe duplicateQuesta è una FYI, e forse anche una domanda.
Un cliente ha chiesto oggi se esiste un limite alla lunghezza della stringa utilizzata per giudicare se le righe sono duplicate o quando si esegue un riepilogo della tabella.Aveva stringhe lunghe 8000 caratteri in una singola cella.(Questi erano i dati dei marker genetici.) Voleva vedere quanti veri duplicati aveva in una colonna di dati.Nessuno dei due riportava le righe corrette.Sospettava un problema di lunghezza delle corde.
Ho eseguito alcuni confronti di forza bruta e ho scoperto che solo i primi 2000 caratteri vengono confrontati quando si esegue Riepilogo tabella o Seleziona righe duplicate.
Ho anche scoperto che fare qualcosa come "if (col1 == col2," Match "," No Match ") non ha il limite di 2000 caratteri.(In altre parole, l'intera stringa (almeno fino a 8000 caratteri) sembra essere utilizzata nel confronto.)
Non conosco altre funzioni.
Quindi questo è un FYI per fare attenzione al confronto di stringhe lunghe ... e una domanda: qualcuno sa perché in questi casi ci limitiamo a 2000 caratteri?
Oggetto: Limite sulla lunghezza della stringa utilizzato in Riepilogo tabella e in Seleziona righe duplicateCiao Jerry,
Sto speculando qui, ma penso che ciò che il tuo cliente sta facendo con Riepilogo tabella o Seleziona righe duplicate sia inappropriato.Puoi fornirci maggiori dettagli? È un codice genetico lungo 8000 caratteri e composto solo da A, C, G e Ts? Se è così, questo sarebbe un approccio inappropriato.Sembra che stiano cercando di inserire un piolo quadrato in un foro rotondo.
Se vogliono davvero usare JMP per questo, sarebbe meglio creare una singola colonna di ogni carattere e quindi cercare i duplicati tra le righe.
Più importante è il loro obiettivo. Perché cercano duplicati?
Oggetto: Limite sulla lunghezza della stringa utilizzato in Riepilogo tabella e in Seleziona righe duplicateBuon punto Chris.Sì, stanno guardando le stringhe ACGT.La mia impressione è che avesse 2000 gruppi di 4 caratteri, tutti uniti in una stringa di 8000 caratteri.Non ha fornito ulteriori dettagli oltre a voler confrontare una stringa di 8000 caratteri con un'altra e cercare duplicati.
Dato che non conosco le stringhe ACGT e come vengono utilizzate, non sapevo chiederglielo.(Tuttavia, ne sapevo abbastanza per riconoscere che potrebbe essere interessata a JMP Genomics.In precedenza non erano a conoscenza di JMPG, ma ora stanno rosicchiando!)
Chiederò cosa sta cercando di fare.Apprezzo il feedback!
Jerry
Oggetto: Limite sulla lunghezza della stringa utilizzato in Riepilogo tabella e in Seleziona righe duplicateInteressante. Sembra che il cliente abbia ragione.
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" )
);
Ci scommetto @chungwei avrà qualche intuizione.
Oggetto: Limite sulla lunghezza della stringa utilizzato in Riepilogo tabella e in Seleziona righe duplicateCerto, Jerry!
Ci sono altri semplici strumenti (come il codice JSL che hai usato) che possono esaminare lunghi punti per il confronto. Di particolare interesse è che non solo gli stessi caratteri nella stringa hanno la stessa lunghezza, ma anche l'ordine in cui si trovano. Veri duplicati nel carattere e nell'ordine di aspetto di quei personaggi.
Tuttavia, se ogni carattere (base / indicatore in questo caso) era nella propria colonna e tutte quelle colonne sono state selezionate per essere utilizzate per selezionare le righe duplicate o il riepilogo della tabella dovrebbe funzionare (ma potrebbe essere lento).
Di solito questo è un problema bioinformatico e le persone potrebbero scrivere codice per risolverlo.
Oggetto: Limite sulla lunghezza della stringa utilizzato in Riepilogo tabella e in Seleziona righe duplicatePer quello che vale, le formule delle colonne sembrano confrontare stringhe grandi almeno quanto 8K caratteri.
Lo script seguente identifica quali 27 di 30 righe sono duplicati di 3 stringhe di 8001 caratteri che differiscono solo sull'ultimo carattere.
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>Oggetto: Limite sulla lunghezza della stringa utilizzato in Riepilogo tabella e in Seleziona righe duplicateRingrazia tutti.@brady_brady e @Jeff_Perkinson , la tua analisi è più elegante di quella che ho fatto io, ma siamo giunti alla stessa conclusione ... Limite di 2000 caratteri su Riepilogo tabella e Seleziona righe duplicate, ma le formule sembrano riconoscere tutti i caratteri.
Sperando @chungwei avrà qualche approfondimento aggiuntivo, forse più funzioni che hanno questa limitazione?
Oggetto: Limite sulla lunghezza della stringa utilizzato in Riepilogo tabella e in Seleziona righe duplicateSembra che sia un problema, in diversi punti, riepilogo, filtro dei dati, distribuzione.
Forse in più posti non ho controllato tutti i posti che classificano i dati delle colonne.
È un insetto .