Kazalo
Zdaj imamo GUI definiran, vendar moramo še vedno ustvariti nekaj R kode iz tega. Za to potrebujemo drugo besedilno datoteko, code.js, ki se nahaja v istem imeniku kot description.xml. Morda poznate JavaScript (ali če smo tehnično natančni: ECMA-script). Dokumentacijo o JS je mogoče najti v izobilju, tako v tiskani obliki kot na internetu (npr.: https://developer. mozilla.org/en/Core_JavaScript_1.5_Guide). Toda za večino namenov vam sploh ne bo treba vedeti veliko o JS, saj bomo uporabljali le nekatere zelo osnovne funkcije.
Namig
Ko preberete to poglavje, si oglejte tudi rkwarddev paket. Zagotavlja nekaj R funkcij za ustvarjanje JavaScript kode, ki se pogosto uporablja v RKWard. Prav tako lahko samodejno zazna spremenljivke, uporabljene v vtičniku XML datoteko in ustvarite osnovni JavaScript kodo iz tega, s katero lahko začnete.
Opomba
Predpostavlja se, da so datoteke vtičnika .js kodirane z UTF-8. Ne pozabite preveriti kodiranja urejevalnika, če uporabljate znake, ki niso ascii.
Za t-test z dvema spremenljivkama je datoteka code.js videti takole (z vmesnimi komentarji):
function preprocess () {
}
Datoteka JS je organizirana v tri ločene funkcije: preprocess(), calculate() in printout(). To je zato, ker ni potrebna vsa koda na vseh stopnjah. Trenutno se funkcija predprocesa na mnogih mestih res ne uporablja (običajno jo boste v celoti izpustili).
function calculate () {
echo ('res <- t.test (x=' + getString ("x") + ', y=' + getString ("y") + ', hypothesis="' + getString ("hypothesis") + '"' + getString ("varequal"));
var conflevel = getString ("conflevel");
if (conflevel != "0.95") echo (', conf.level=' + conflevel);
echo (')\n');
}
Ta funkcija ustvari dejansko R sintakso, ki se izvaja iz GUI nastavitev. Oglejmo si to podrobno: Koda, ki jo je treba uporabiti, je ustvarjena s stavkom echo(). Če pogledamo stavek echo() korak za korakom, je prvi del tega
res <- t.test (
kot golo besedilo. Nato moramo izpolniti vrednost, uporabnika, izbranega kot prvo spremenljivko. To pridobimo s pomočjo getString ("x") in ga dodamo nizu, ki ga odmevamo “echoed”. To natisne vrednost GUI-elementa z id="x": naš prvi <checkbox>. Nato dodamo ', ' in naredimo isto, da pridobimo vrednost elementa "y" - drugi <checkbox>. Za hipotezo (skupina <radio>) in enake variance <checkbox> je postopek zelo podoben.
Upoštevajte, da lahko namesto združevanja izhodnih izrezkov s “+” uporabite tudi več stavkov echo(). Vse je natisnjeno v eni vrstici. Če želite ustvariti prelom vrstice v ustvarjeni kodi, vstavite "\n" v odmevani niz. Teoretično lahko ustvarite celo veliko vrstic z enim stavkom echo, vendar naj bo le ena vrstica (ali manj) generirane kode na echo().
Opomba
Poleg getString() obstajajo tudi funkcije getBoolean(), ki bodo poskušale vrniti vrednost kot logično (primerno za uporabo v if()-statement) in getList(), ki bo poskušal vrniti seznamom podobne podatke v JS Array(). Kasneje bomo pokazali primere teh.
Ko si ogledujete obstoječe vtičnike, boste našli tudi veliko vtičnikov, ki uporabljajo getValue() namesto getString() in dejansko sta skoraj enaka. Vendar je uporaba getString(), getBoolean() in getList() priporočena praksa od različice 0.6.1.
Za raven zaupanja postane malo bolj težavno. Zaradi estetike ne želimo izrecno določiti stopnje zaupanja, ki naj se uporabi, če ustreza privzeti vrednosti. Zato namesto brezpogojnega tiskanja vrednosti najprej pridobimo v spremenljivki. Nato preverimo, ali se ta spremenljivka razlikuje od "0,95", in če se, natisnemo dodatni argument. Nazadnje ponovimo zaključni oklepaj in prelom vrstice: ")\n". To je vse za funkcijo izračuna.
function printout () {
echo ('rk.header (' + i18n ("Two Variable t-Test") + ')\n');
echo ('rk.print (res)\n');
}
In to je bilo v večini primerov vse, kar je pri funkciji tiskanja. rk.header() natisne standardni naslov za rezultate. Upoštevajte, da morate v datotekah .js ročno označiti vse nize, ki jih je mogoče prevesti, z uporabo i18n() ali nekaterih drugih ukazov. Več o tem v poglavju o internacionalizaciji. Temu lahko dodate še nekaj informacij, če želite, npr.:
function printout () {
new Header (i18n ("Two Variable t-Test"))
.addFromUI ("varequal")
.add (i18n ("Confidence level"), getString ("conflevel")) // Note: written like this for illustration purposes. More automatic:
// .addFromUI ("conflevel")
.print ();
echo ('rk.print (res)\n');
}
rk.print() uporablja paket R2HTML za zagotavljanje HTML formatiranega izhoda. Druga koristna funkcija je rk.results(), ki lahko izpiše tudi različne vrste tabel rezultatov. Če ste v dvomih, preprosto uporabite rk.print() in zaključite. Razred JS Header je pomočnik na ravni JS za generiranje klica rk.header() (samo poglejte ustvarjeno kodo R). V nekaterih primerih boste morda želeli neposredno poklicati echo ('rk.header (...)'), da natisnete glavo za vaš izhod.
Upoštevajte, da je interno izhod le navaden HTML dokument v tem trenutku. Zato vas bo morda zamikalo dodati HTML z uporabo rk.cat.output(). Čeprav bo to delovalo, tega ne počnite. Izhodni format se lahko v prihodnosti spremeni (npr. v ODF), zato je najbolje, da HTML določeno kodo. Raje poenostavite stvari s rk.header(), rk.print(), rk.results() in - če je potrebno - - rk.print.literal(). Če se zdi, da ne izpolnjujejo vaših potreb po oblikovanju, se za pomoč obrnite na nas na poštnem seznamu.
Čestitke! Ustvarili ste svoj prvi vtičnik. Preberite v naslednjih poglavjih za naprednejše koncepte.