Mori/Codetest: Difference between revisions

From Opasnet
Jump to navigation Jump to search
mNo edit summary
m (Summer cleanup (of old code))
Line 1: Line 1:
[[Category:Contains R code]]


==Decision==
===Old R-code===
<rcode>
library(xtable)
library(OpasnetUtils)
var1 <- data.frame(c = c("A", "A", "C"), d = c("D", "E", "E"), Result = 4:6)
cat("var1\n")
print(xtable(var1), type = "html")
var2 <- data.frame(c = c("A", "A", "C"), d = c("D", "E", "E"), Result = 4:6)
cat("var2\n")
print(xtable(var2), type = "html")
dec <- data.frame(
                  Decision = rep(c("Decision 1", "Decision 2"), each = 2),
                  Option = c("OptA", "OptB"),
                  Variable = c("var1", "var1", "var1", "var2"),
                  Cell = c(" c: A; d: E", " d: D"),
                  Change = c("Replace", "Multiply"),
                  Result = 7:10)
cat("Decision\n")
print(xtable(dec), type = "html")
out <- decisions.apply(dec)
cat("Variable", names(out)[1], "output\n")
print(xtable(out[[1]]), type = 'html')
cat("Variable", names(out)[2], "output\n")
print(xtable(out[[2]]), type = 'html')
</rcode>
{{attack|# |Why does the var2 outcome show row 3 OptB A E 50, because the decision should be applied only for row 1 OptB A D 4 ? There is a bug somewhere. |--[[User:Jouni|Jouni]] 16:12, 16 May 2012 (EEST)}}
===Test Code===
{{comment|# |Oletko saanut bugin selville? Luulen, että decisions.apply jossain vaiheessa sekoittaa rivit niin, että ensimmäiselle riville tarkoitettu kertolasku kohdistuukin kolmannelle riville. Mutta miksi?|--[[User:Jouni|Jouni]] 08:53, 29 June 2012 (EEST)}}
:{{comment|# |Itsekin ajattelin samaa, mutta en ole vielä ymmärtänyt miksi se toimii niin.. Minulla meni pari päivää jahdatessa tuon yhden virheilmoituksen syytä, kunnes Teemu selvensi minulle että se on tarkoituskin tulla, joskin virheilmoituksessa on kuulemma parantamisen varaa. Nyt vasta alan ymmärtää paremmin miten tuo decisions.apply oikein toimii.|--[[User:Mori|Mori]] 17:06, 3 July 2012 (EEST)}}
{{comment|# |No, nyt taisi selvitä mikä siinä on ongelma.. Huomasin, että Var2 output taulussa ei ole Decision1 saraketta, mutta kun datoja muuttelee hiukan ja antaa sille kyseisen sarakkeen, laskutoimitukset tuntuvat menevän oikein. Ilmeisesti sen sarakkeen puuttuminen hajottaa jonkun noista loopeista (ainakin Teemun mukaan) joka johtaa laskutoimituksen virheellisyyteen |--[[User:Mori|Mori]] 14:47, 9 July 2012 (EEST)}}
<rcode>
library(xtable)
library(OpasnetUtils)
var1 <- data.frame(c = c("A", "A", "C"), d = c("D", "E", "E"), Result = 4:6)
cat("var1\n")
print(xtable(var1), type = "html")
var2 <- data.frame(c = c("A", "A", "C"), d = c("D", "E", "E"), Result = 4:6)
cat("var2\n")
print(xtable(var2), type = "html")
dec <- data.frame(
                  Decision = rep(c("Decision 1", "Decision 2"), each = 2),
                  Option = c("OptA", "OptB"),
                  Variable = c("var2", "var1", "var1", "var2"),
                  Cell = c(" c: A; d: E", " d: D"),
                  Change = c("Replace", "Multiply"),
                  Result = 7:10)
cat("Decision\n")
print(xtable(dec), type = "html")
#out <- decisions.apply(dec)
assessment = NULL
out <- as.list(unique(dec$Variable))
names(out) <- as.character(unique(dec$Variable))
for(variables in unique(dec$Variable)) { # Take one variable at a time.
dec.var <- dec[dec$Variable == variables, ] # dec.var = variable-specific decisions
scenarios <- data.frame(temp = 1)
for(decisions in unique(dec.var$Decision)) { # Add BAU option to each decision and merge decisions.
temp <- as.character(dec.var[dec.var$Decision == decisions, "Option"])
temp <- data.frame(Options = c(temp, "BAU"))
colnames(temp) <- decisions
scenarios <- merge(scenarios, temp)
}
if(!is.null(assessment)) {
var <- assessment@vars[[as.character(dec.var$Variable[1])]]
} else {
if(exists(as.character(dec.var$Variable[1])))
{var <- get(as.character(dec.var$Variable[1]))
} else {
stop()
}
}
var <- merge(scenarios[colnames(scenarios) != "temp"], var)
#print(xtable(dec.var), type = 'html')
#print(xtable(var), type = 'html')
for(s in 1:nrow(dec.var)) {cat(s)}
for(s in 1:nrow(dec.var)) { # Each row in decision handled separately
cell <- gsub("^[ \t]+|[ \t]+$", "", as.character(dec$Cell[s])) # Leading and trailing whitespaces removed.
cell <- gsub(":[ \t]+", ":", cell) # Whitespaces removed after :
cell <- gsub(";[ \t]+", ";", cell) # Whitespaces removed after ;
cell <- gsub("[ \t]+:", ":", cell) # Whitespaces removed before :
cell <- gsub("[ \t]+;", ";", cell) # Whitespaces removed before ;
cell <- strsplit(cell, split = ";") # Separate cell identifiers (indices and locations)
cell <- strsplit(cell[[1]], split = ":")
cond <- as.character(dec.var$Decision[s])
cond <- var[, cond] == as.character(dec.var$Option[s]) # Only the rows with the relevant option.
for(r in 1:length(cell)) { # All Cell conditions extracted and combined with AND.
cond <- cond * (var[, cell[[r]][1]] == cell[[r]][2])
}
cond <- as.logical(cond)
if(dec.var$Change[s] == "Replace") {var[cond, "Result"] <- dec.var$Result[s]}
if(dec.var$Change[s] == "Add") {var[cond, "Result"] <- dec.var$Result[s] + var[cond, "Result"]}
if(dec.var$Change[s] == "Multiply") {var[cond, "Result"] <- dec.var$Result[s] * var[cond, "Result"]}
}
out[[variables]] <- var
}
cat("Variable", names(out)[1], "output\n")
print(xtable(out[[1]]), type = 'html')
cat("Variable", names(out)[2], "output\n")
print(xtable(out[[2]]), type = 'html')
</rcode>
==emfBoilerit==
===Vanha koodi===
<rcode>
library(OpasnetUtils)
library(xtable)
emfBoilerit <- new("ovariable",
name = "emfBoilerit",
data = tidy(op_baseGetData("opasnet_base", "Op_fi3016"), direction = "wide", objname = "emfBoilerit")
)
objects.put(emfBoilerit)
print(xtable(emfBoilerit@data), type = 'html')
cat("Muuttuja alustettu. Kopioi ajosivun osoitteen avain talteen tulevaa käyttöä varten.\n")
</rcode>
===Uusi koodi===
Kaava:
<math>EF = EFs/Sa*S</math>
EF = Laskettu päästökerroin
EFs = Päästökerroin paikallaan olevien polttomoottorien päästökertoimet taulukossa
Sa = Päästökertoimen laskennassa käytetty vakiorikkipitoisuus
S = polttoaineen rikkipitoisuus
<rcode variables="
name:polttoaine|description:Mikä polttoaine on kyseessä?|type:selection|options:'Masuunikaasu';Masuunikaasu;'Koksiuunikaasu';Koksiuunikaasu;'Kaatopaikkakaasu';Kaatopaikkakaasu;'Maakaasu';Maakaasu;'Nestekaasu - Butaani';Nestekaasu - Butaani;'Nestekaasu - Propaani';Nestekaasu - Propaani;'Raskas polttoöljy';Raskas polttoöljy;'Diesel';Diesel;'Jäteöljy';Jäteöljy|default:'Diesel'|
name:Sa|description:Päästökertoimen laskennassa käytetty vakiorikkipitoisuus|default:1|
name:S|description:Polttoaineen rikkipitoisuus|default:1
">
library(OpasnetUtils)
library(xtable)
riippuvuudet <- data.frame(
  Name = c("EFs", "Sa", "S", "polttoaine")
)
funktio <- function(dependencies, ...) {
data <- op_baseGetData("opasnet_base", "Op_fi3016")
data <- tidy(data)
out <- data[data$Suure == "Päästökerroin", c("Polttoaine", "Haitta-aine", "Päästöjen rajoittaminen", "Result")]
out <- merge(out, data.frame(Polttoaine = polttoaine))
out$Result <- as.numeric(out$Result) * EFs / Sa * S
out <- dropall(out)
return(out)
}
emfBoilerit <- new("ovariable",
name = "emfBoilerit",
data = tidy(op_baseGetData("opasnet_base", "Op_fi3016"), direction = "wide", objname = "emfBoilerit"),
dependencies = riippuvuudet,
formula = funktio
)
objects.put(emfBoilerit)
temp <- EvalOutput(emfBoilerit)
out <- temp@output
print(xtable(emfBoilerit@data), type = 'html')
cat("Muuttuja alustettu. Kopioi ajosivun osoitteen avain talteen tulevaa käyttöä varten.\n")
</rcode>
==Boileripäästöt==
===R-koodi===
<rcode variables="
name:polttoaine|description:Mikä polttoaine on kyseessä?|type:selection|options:'Masuunikaasu';Masuunikaasu;'Koksiuunikaasu';Koksiuunikaasu;'Kaatopaikkakaasu';Kaatopaikkakaasu;'Maakaasu';Maakaasu;'Nestekaasu - Butaani';Nestekaasu - Butaani;'Nestekaasu - Propaani';Nestekaasu - Propaani;'Raskas polttoöljy';Raskas polttoöljy;'Diesel';Diesel;'Jäteöljy';Jäteöljy|default:'Diesel'|
name:p_maara|description:Montako tonnia polttoainetta palaa tunnissa?|default:100|
name:tunnit|description:Montako tuntia polttoainetta poltetaan?|default:1
">
library(OpasnetUtils)
library(xtable)
riippuvuudet <- data.frame(
Name = c("polttoaine", "p_maara", "tunnit")
)
funktio <- function(dependencies, ...) {
data <- op_baseGetData("opasnet_base", "Op_fi3076")
data <- tidy(data)
out <- data[data$Suure == "Päästökerroin", c("Polttoaine", "Haitta-aine", "Päästöjen rajoittaminen", "Result")]
out <- out[out[["Polttoaine"]] %in% polttoaine,]
out$Result <- as.numeric(out$Result) * p_maara * tunnit
out <- dropall(out)
return(out)
}
Boileripaastot <- new("ovariable",
name = "Boileripaastot",
dependencies = riippuvuudet,
formula = funktio
)
objects.put(Boileripaastot)
temp <- EvalOutput(Boileripaastot)
out <- temp@output
print(xtable(out), type = 'html')
</rcode>
==Sähköntuotannon päästöt==
===R-koodi===
<rcode variables="
name:polttoaine|description:Mikä polttoaine on kyseessä?|type:selection|options:'Butaani';Butaani;'Maakaasu';Maakaasu;'Öljytisleet';Öljytisleet;'Öljytisleet (mm. Diesel)';Öljytisleet (mm. Diesel);'Polttoöljy';Polttoöljy;'Propaani';Propaani|default:'Butaani'|
name:haitta_aine|description:Mitä haitta-ainetta / -aineita kyseisen polttoaineen polttamisesta syntyy?|type:checkbox|options:'Ammoniakki';Ammoniakki;'As ja yhdisteet';As ja yhdisteet;'B ja yhdisteet';B ja yhdisteet;'Bentseeni';Bentseeni;'Be ja yhdisteet';Be ja yhdisteet;'Cd ja yhdisteet';Cd ja yhdisteet;'CO';CO;'Co ja yhdisteet';Co ja yhdisteet;'Cu ja yhdisteet';Cu ja yhdisteet;'Cr(III) yhdisteet';Cr(III) yhdisteet;'Cr(IV) yhdisteet';Cr(IV) yhdisteet;'Epäorgaaniset syanidiyhdisteet';Epäorgaaniset syanidiyhdisteet;'Etyylibentseeni';Etyylibentseeni;'F-yhdisteet';F-yhdisteet;'Formaldehydi';Formaldehydi;'H₂SO₄';H₂SO₄;'HCl';HCl;'Hg';Hg;'Hg ja yhdisteet';Hg ja yhdisteet;'Kumeeni';Kumeeni;'Ksyleeni';Ksyleeni;'MgO höyry';MgO höyry;'Mn ja yhdisteet';Mn ja yhdisteet;'n-Heksaani';n-Heksaani;'Ni ja yhdisteet';Ni ja yhdisteet;'NOₓ';NOₓ;'PAH-yhdisteet';PAH-yhdisteet;'Pb ja yhdisteet';Pb ja yhdisteet;'PM10';PM10;'PM2.5';PM2.5;'Polyklooratut dioksiinit ja furaanit (TEQ)';Polyklooratut dioksiinit ja furaanit (TEQ);'Sb ja yhdisteet';Sb ja yhdisteet;'Se ja yhdisteet';Se ja yhdisteet;'SO₂';SO₂;'Sykloheksaani';Sykloheksaani;'Tolueeni';Tolueeni;'TVOC';TVOC;'Zn ja yhdisteet';Zn ja yhdisteet|default:'NOₓ'|
name:p_maara|description:Montako tonnia polttoainetta palaa tunnissa?|default:100|
name:tunnit|description:Montako tuntia polttoainetta poltetaan?|default:1|
name:rajoitteet|description:Mitä menetelmiä käytetään päästöjen rajoitettamiseksi?|type:checkbox|options:'Rajoittamaton';Rajoittamaton;'Rajoitettu';Rajoitettu;'Aukkopesijä';Aukkopesijä;'Kangassuodatin';Kangassuodatin;'Kondensaatiopesijä';Kondensaatiopesijä;'Kuivapesijä';Kuivapesijä;'laiha esiseos';laiha esiseos;'Matala NOₓ-poltin';Matala NOₓ-poltin;'Matala-NOₓ poltin (lisäilman syöttö)';Matala-NOₓ poltin (lisäilman syöttö);'Matala-NOₓ poltin (lisäpolttoaineensyöttö)';Matala-NOₓ poltin (lisäpolttoaineensyöttö);'Matala NOₓ-poltin/palokaasujen kierrätys';Matala NOₓ-poltin/palokaasujen kierrätys;'Matala ylimääräinen ilma';Matala ylimääräinen ilma;'Märkäpesijä';Märkäpesijä;'Märkäpesijä ja käsittelyaine';Märkäpesijä ja käsittelyaine;'Palokaasujen kierrätys';Palokaasujen kierrätys;'Palokaasujen kierrätys ja matala-NOₓ poltin';Palokaasujen kierrätys ja matala-NOₓ poltin;'Puolikuivapesijä';Puolikuivapesijä;'Reikälevypesijä';Reikälevypesijä;'Selektiivinen ei-katalyyttinen puhdistaminen';Selektiivinen ei-katalyyttinen puhdistaminen;'Selektiivinen ei-katalyyttinen puhdistaminen ja matala-NOₓ poltin';Selektiivinen ei-katalyyttinen puhdistaminen ja matala-NOₓ poltin;'Selektiivinen katalyyttinen puhdistaminen';Selektiivinen katalyyttinen puhdistaminen;'Suihkeabsorboija ja kangassuodatin (absorboiva)';Suihkeabsorboija ja kangassuodatin (absorboiva);'Suihkeabsorboija ja kangassuodatin (Kalkkikivi)';Suihkeabsorboija ja kangassuodatin (Kalkkikivi);'Sähköstaattinen';Sähköstaattinen;'Sähköstaattinen tai kangasuodatin aktiivihiiliinjektiolla';Sähköstaattinen tai kangasuodatin aktiivihiiliinjektiolla;'Sähköstaattinen tai kangassuodatin ja kiillottava kuivapesijä';Sähköstaattinen tai kangassuodatin ja kiillottava kuivapesijä;'Useita sykloneja';Useita sykloneja;'Venturi pesijä';Venturi pesijä;'Vesi-höyry ruiskutus';Vesi-höyry ruiskutus;'Yksi korkeatehoinen sykloni';Yksi korkeatehoinen sykloni;'Yksi suuren läpimenon sykloni';Yksi suuren läpimenon sykloni;'Yksi tavanomainen sykloni';Yksi tavanomainen sykloni|default:'Rajoittamaton'
">
library(OpasnetUtils)
library(xtable)
riippuvuudet <- data.frame(
Name = c("polttoaine", "p_maara", "tunnit", "haitta_aine","rajoitteet")
)
funktio <- function(dependencies, ...) {
data <- op_baseGetData("opasnet_base", "Op_fi3077")
data <- tidy(data)
out <- data[data$Suure == "Päästökerroin", c("Polttoaine", "Haitta-aine", "Päästöjen rajoittaminen", "Polttoprosessi", "Result")]
out <- out[out[["Polttoaine"]] %in% polttoaine,]
out <- out[out[["Haitta-aine"]] %in% haitta_aine,]
out <- out[out[["Päästöjen rajoittaminen"]] %in% rajoitteet,]
out$Result <- as.numeric(out$Result) * p_maara * tunnit
out <- dropall(out)
return(out)
}
SahTuotPaastot <- new("ovariable",
name = "SahTuotPaastot",
dependencies = riippuvuudet,
formula = funktio
)
objects.put(SahTuotPaastot)
temp <- EvalOutput(SahTuotPaastot)
out <- temp@output
print(xtable(out), type = 'html')
</rcode>

Revision as of 13:37, 26 June 2014