Send attend un objet scriptable lors de l'accès ou de l'évaluation de 'Send',Bon après-midi,
J'obtiens ceci ou une erreur similaire lorsque j'essaie "d'écrire". Sortie de données « Enregistrer » ou « Sauvegarder »
Send attend un objet scriptable lors de l'accès ou de l'évaluation de 'Send', G << /*###*/
'Envoyer' , G << /*###*/Save( "/homedirectory/Drug_test.txt" ) /*###*/
À titre d'exemple, j'ai utilisé l'exemple Fitmodel (ci-dessous) pour "Drug.jmp", qui est un exemple de fichier JMP.
</CODE></P><P><CODE class=" language-jsl">dt = Open( "$SAMPLE_DATA/Drug.jmp" ); obj = dt << Fit Model( Y( :y ), Effects( :Drug, :x ), Personality( Standard Least Squares ), Emphasis( Minimal Report ), Run ); G = obj << Get Effect PValues; Show( G ); //values show in log G << Save( "/homedirectory/Drug_test.txt");// I get the error message:<EM>Send attend un objet scriptable lors de l'accès ou de l'évaluation de 'Send', G << /*###*/</EM><BR /><EM>// 'Envoyer' , G << /*###*/Save( "/homedirectory/Drug_test.txt" ) /*###*/</EM> // also did not work G<<SAVETEXT></SAVETEXT>
<CODE class=" language-jsl">
What am I doing wrong?
DLC7JMP
<LINGO-LABS id="lingo-labs-769883" slang="en-US" mode="CREATE"><LINGO-LABEL>Automatisation et scripts</LINGO-LABEL><LINGO-LABEL>macOS</LINGO-LABEL></LINGO-LABS>Re : Envoyer attend un objet scriptable lors de l'accès ou de l'évaluation de "Envoyer",Qu'essayez-vous de sauvegarder dans ce cas ? Si vous souhaitez enregistrer les résultats dans un fichier texte, vous devez utiliser Save Text File
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Drug.jmp");
obj = dt << Fit Model(
Y(:y),
Effects(:Drug, :x),
Personality(Standard Least Squares),
Emphasis(Minimal Report),
Run
);
G = obj << Get Effect PValues;
Save Text File("$TEMP/drugtest.txt", Char(G));
Web("$TEMP/drugtest.txt"); // should open in default .txt application
Donc, dans ce cas, vous utilisez l’envoi d’un message incorrect à une matrice.
Re : Envoyer attend un objet scriptable lors de l'accès ou de l'évaluation de "Envoyer",Merci. Cela fonctionne bien.
Souhaitez-vous expliquer pourquoi cette boucle de test n'ouvre que les fenêtres « d'analyse » sans variables « Y » ?
Il s'agit d'un test pour seulement 3 colonnes de données. Mon objectif est de l'exécuter sur 4 500 colonnes et de stocker les deux valeurs p pour chaque analyse.
// Fichier ouvert
dt = Ouvert ( "home/AND_Counts_alphaorder_SumNorm.jmp" );
// Définir la plage des colonnes de réponse
colonneDébut = 31 ;
finColonne = 33 ;
// Boucle sur les colonnes de réponse
pour (col = startColumn, col <= endColumn, col++,
réponseVar = Colonne (dt, col) << Obtenir le nom ;
obj = dt << Ajuster le modèle (
Y (varréponse),
Effets( :mass, ::Accl_Temp_ordinal ),
Personnalité (moindres carrés standards),
Accentuation (rapport minimal),
Courir),
);
P = obj << Obtenir l'effet PValues ;
Enregistrer le fichier texte ( "~/Projects_AB/Ptest.csv" , Char (P));
// Cela ouvre 3 fenêtres sans "Y"
Re : Envoyer attend un objet scriptable lors de l'accès ou de l'évaluation de "Envoyer",Je pense que cela pourrait suffire si vous ajoutez simplement Eval() autour de votre réponseVar (et corrigez la portée Accl_Temp_ordinal de :: à
. De plus, si vous travaillez avec autant de colonnes, testez-le d'abord avec une quantité beaucoup plus petite afin que vous puissiez faire fonctionner le script de manière à ne pas vous retrouver avec 4 500 plates-formes Fit Model ouvertes par accident. Ci-dessous devrait être la version de votre script avec les correctifs que j'ai suggérés
Names Default To Here(1);
dt = Open("home/AND_Counts_alphaorder_SumNorm.jmp");
// Define the range of response columns
startColumn = 31;
endColumn = 33;
// Loop over the response columns
For(col = startColumn, col <= endColumn, col++,
responseVar = Column(dt, col) << Get Name;
obj = dt << Fit Model(
Y(Eval(responseVar)),
Effects(:mass, :Accl_Temp_ordinal),
Personality(Standard Least Squares),
Emphasis(Minimal Report),
Run
);
);
P = obj << Get Effect PValues;
Save Text File("~/Projects_AB/Ptest.csv", Char(P));
Il s'agit d'un type de méthode un peu différent, mais cela peut peut-être donner quelques idées au moins sur la manière de collecter les résultats et de clôturer les rapports.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
colnames = {"height", "weight"}; // many method of getting these
// Loop over the response columns
colpvals = Associative Array();
For Each({colname}, colnames,
colname = "height"
fm = dt << Fit Model(
Y(Eval(colname)),
Effects(:age, :sex),
Personality(Standard Least Squares),
Emphasis(Minimal Report),
Run
);
pvals = fm << Get Effect PValues;
// list conversion seems to be necessary for for JSON conversion
// and it is easiest to do here
colpvals[colname] = As List(pvals);
fm << close window;
wait(0); // most likely unnecessary
);
Save Text File("$TEMP/test.json", As JSON Expr(colpvals));
// Web("$TEMP/test.json");
Vous pouvez également envisager de collecter les résultats dans un tableau de données JMP et de les convertir en .csv, mais cela dépend du résultat final que vous souhaitez obtenir.
Re : Envoyer attend un objet scriptable lors de l'accès ou de l'évaluation de "Envoyer",Jarmo,
Merci, j'essaye ceci et "Accepter comme solution" si cela fonctionne.
Merci encore.
Doug
Re : Envoyer attend un objet scriptable lors de l'accès ou de l'évaluation de "Envoyer",Salut Jarmo,
Votre solution a fonctionné.
Merci!!
Cependant, "Enregistrer le fichier Tex" au format texte ou CSV a écrasé chaque entrée, ne laissant que la dernière valeur p.
J'ai donc combiné vos deux fichiers pour créer un fichier JSON, avec des notes en bas du script pour décrire comment importer dans JMP.
Voir ci-dessous pour t
Merci encore.
Doug
Names Default To Here(1);
dt = Open("~home/mydatafile.jmp");
// Loop over the response columns
colpvals = Associative Array();
// Define the range of response columns
startColumn = 23;
endColumn = 42;
// Loop over the response columns
For(col = startColumn, col <= endColumn, col++,
responseVar = Column(dt, col) << Get Name;
fm = dt << Fit Model(
Y(Eval(responseVar)),
Effects(:mass, :Accl_Temp_ordinal),
Personality(Standard Least Squares),
Emphasis(Minimal Report),
Run
);
Pv = fm << Get Effect PValues;
// list conversion seems to be necessary for for JSON conversion
// and it is easiest to do here
colpvals[responseVar] = As List(Pv);
fm << close window;
wait(0); // most likely unnecessary
);
Save Text File("~home/Ptest4.json", As JSON Expr(colpvals));
// NOTE: open JSON file in JMP as "Data (Using Preview)" not best guess.
// top left choose "Stack" (upper right) and "Huge Guess" (under "Guess" pull down)
// File is columns of "responseVar" (data column names), rows are the two p-values
// Transposing in JMP may be desirable.
Re : Envoyer attend un objet scriptable lors de l'accès ou de l'évaluation de "Envoyer",Vous devrez collecter les résultats dans une liste/matrice/une autre structure de données à l'intérieur de la boucle, puis gérer leur sauvegarde EN DEHORS de la boucle.
Vous pouvez également d'abord créer le fichier vide (ou dans le premier cycle de la boucle) avec le mode de remplacement (mode par défaut), puis ajouter de nouvelles données au fichier en utilisant le mode de remplacement . Enregistrer le fichier texte (chemin, texte | BLOB, ) .
Vous souhaiterez probablement ajouter des en-têtes au fichier .csv et au nom de la colonne.
Names Default To Here(1);
filepath = "$TEMP/test.csv";
dt = Open("$SAMPLE_DATA/Big Class.jmp");
colnames = {"height", "weight"}; // many method of getting these
For Each({colname}, colnames,
fm = dt << Fit Model(
Y(Eval(colname)),
Effects(:age, :sex),
Personality(Standard Least Squares),
Emphasis(Minimal Report),
Run
);
pvals = fm << Get Effect PValues;
// list conversion seems to be necessary for for JSON conversion
// and it is easiest to do here
fm << close window;
If(!File Exists(filepath),
savemode = "replace";
,
savemode = "append"
);
Save Text File(filepath, Char(pvals) || "\!N", mode(savemode));
wait(0); // most likely unnecessary
);
// Web(filepath);
Si je devais faire quelque chose comme ça, je collecterais très probablement les résultats dans le tableau JMP, le nettoierais si nécessaire et l'enregistrerais au format souhaité.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
colnames = {"height", "weight"}; // many method of getting these
dt_result = Empty();
For Each({colname}, colnames,
fm = dt << Fit Model(
Y(Eval(colname)),
Effects(:age, :sex),
Personality(Standard Least Squares),
Emphasis(Minimal Report),
Run
);
dt_p = Report(fm)[Outline Box("Effect Tests"), Table Box(1)] << Make Combined Data Table(Invisible);
fm << close window;
dt_p << Delete Scripts(dt_p << Get Table Script Names);
If(Is Empty(dt_result),
dt_result = dt_p;
dt_result << Set Name("pvalues");
,
dt_result << Concatenate(Append to first table, dt_p);
Close(dt_p, no save);
);
);
dt_result << show window(1);

Vous pouvez ensuite l'enregistrer dans un fichier .csv en utilisant (ou l'enregistrer sous forme de table JMP pour vous assurer de ne perdre aucune donnée en décimales)
dt_result << Save("$TEMP/test.csv");
