Ongelma on siis seuraavanlainen: Mulla on MSSQL-kannassa dataa ja siitä pitäisi tehdä tilastollinen yhteenveto C#-konsoliohjelmaan tekstimuodossa. Olen hakenut tiedot kannasta ja tehnyt R-koodin, joka laskisi yhteenvedon. Mutta nyt en osaa heittää tuota R-koodia C#:sta R:ään ja takaisin ilman, että se tulostaisi dataa C#-konsoliohjelmaan. Asensin Visual Studioon R.NETin, https://rdotnet.codeplex.com/ .
Tässä kokeiluni:
REngine.SetEnvironmentVariables(); REngine engine = REngine.GetInstance(); Console.ReadKey(); var TestResult = engine.Evaluate(rcode).AsDataFrame(); Console.ReadKey(); engine.Dispose();
Mutta tämä tulostaa yhteenvedon konsoliin, enkä haluiaisi sitä.
Nyt siis pitäisi saada siirrettyä dataa C#:n ja R:n välillä ilman tulostusta. Googlasin, mutta en löytänyt ratkaisua. Mietin myös, että jos R-koodin sekaan heittäisi sink()-käskyn, niin saisin R:n tulokset kenties tiedostoon. Mutta tämäkin vaatisi opettelua ja tarkistuksia: Onko tiedoston kirjoitusoikeudet kunnossa? Onko kovalevyllä tilaa? Miten varmistetaan, että R kirjoittaa tiedoston varmasti uuteen tiedostoon eli samannimistä tiedostoa ei ole jo olemassa? Miten varmistetaan, että jos R luo vaikka tiedoston temp.txt ja C# lukee tiedoston temp.txt, niin mikään muu ohjelma ei ole kirjoittamisen ja lukemisen välissä muokannut tiedostoa?
Eli mikä olisi näppärin ratkaisu ongelmaani: C# laskisi tilastollisen laskun R:n avulla ja tallentaisi vastauksen C#-muuttujaan ilman tulostamista konsoliin?
Osaatko selventää mihin tarvitset tuota R:ää mihinkään?
Jos et muuta keksi, suorita skripti ulkoisella R-ohjelmalla ja ota tuloste talteen. Tästä löytyy helposti googlaamalla tietoa, esim. haku C# run program and return output johtaa Process-luokan pariin.
Tai sitten voisit muuttaa R-skriptiäsi niin, että se ei tulosta tietoa vaan palauttaa käsitellyn datan, jolloin voit C#:n puolella poimia tulokset muuttujiin. Luitko sivuston esimerkkejä yhtään? Siellähän haetaan esimerkiksi R-funktion t.test tulos muuttujaan.
groovyb kirjoitti:
Osaatko selventää mihin tarvitset tuota R:ää mihinkään?
Pitäisi tehdä ohjelma, joka laskisi automaattisesti tilastollisia testejä. R:ssä on niin paljon käyttökelpoista valmiina.
Metabolix kirjoitti:
Luitko sivuston esimerkkejä yhtään? Siellähän haetaan esimerkiksi R-funktion t.test tulos muuttujaan.
Luin, mutta nuo koodit tulostavat myös näytölle. Saan tulokset muuttujiin mutta tuo näytölle tulostaminen pitäisi saada pois.
Kokeileppa laittaa autoprint falseksi ennen suorituksia
REngine.SetEnvironmentVariables(); REngine engine = REngine.GetInstance(); engine.AutoPrint = false; //Tästä oli dokumentaatiossa maininta, en testannut kylläkään
Tämä auttoi eteenpäin. Nyt saan tulokset muuttujiin tulostumatta ruudulle. Mutta jos lasku tuottaa warningin, niin se tulostuu vielä ruudulle. Se pitäisi saada talteen ja tarkistaa, onko virhettä tullut, jotta voisin ajaa koodin uudelleen toisella parametrilla. Kokeilin pistää R:n puolella option(warn=-1) mutta se ei ratkaissut ongelmaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.