+ Näytä koodi- Piilota koodi
cat("Ladataan funktioita. \n")
library(OpasnetBaseUtils)
library(xtable)
########################## tf is a function that takes one large table, finds matching rows and
#### produces a standard-format vector that can be operated with easily. Parameters:
# condition = a vector with conditions for each condition column. The length must be ncol(col.condition).
############ External parameters (these must be defined as objects before the function is run;
##### they are not given in the function but they are used by it):
# data = a data frame that contains the data
# col.condition = vector with names of columns that contain the indices that must match in the data
# col.common = vector with names of columns that are used as indices in calculations.
# col.result = the column that contains the actual values.
tf <- function(condition, ...) {
# Take the part of data that fits the condition. Drop all columns but col.common and col.result.
out <- data[data[col.condition] == condition, c(col.common, col.result)]
# Merge the selected data with all col.common and drop possible extra rows so that the outcome always has the same size.
out <- merge(unique(data[col.common]), out, all = TRUE)
out <- out[rownames(unique(out[col.common])), ]
return(out[, col.result])
}
####################Funktio väestön ympäristöperäisen haitta-ainealtistumisen määrittelyyn
########Saanti lasketaan yksikössä mg/kg/d kun ympäristön haitta-ainepitoisuudet on ilmoitettu yksiköissä mg/m3 (ilma), mg/l (vesi) sekä mg/kg (kiinteät väliaineet)
Chronic.environmental.exposure.to.toxic.substances <- function(C.air.outdoor, C.air.indoor, data, ...) {
##Hengitystiet
Air.inh <- ((C.air.outdoor * ((24 - tf("Ef.air.indoor")) / 24)) + (C.air.indoor * (tf("Ef.air.indoor") / 24))) * tf("Ir.air") / (tf("Bw") * tf("At"))
##Ruuansulatuskanava
###Juomavesi
Dw.ing <- C.dw * tf("Ir.dw") * tf("Ef.dw") / (tf("Bw") * tf("At"))
###Maaperä
Soil.ing <- C.soil * (tf("Ir.soil") / 1000000) * tf("Ef.soil") / (tf("Bw") * tf("At"))
###Vihannekset
Lfc.ing <- C.lfc * tf("Ir.lfc") * tf("F.lfc.loc") / tf("Bw")
###Juurekset
Tfc.ing <- C.tfc * tf("Ir.tfc") * tf("F.tfc.loc") / tf("Bw")
###Marjat
Berries.ing <- C.berries * tf("Ir.berries") * tf("F.berries.loc") / tf("Bw")
###Pintavesi
Sw.ing <- C.sw * tf("Ir.sw") * tf("Ef.sw") / (tf("Bw") * tf("At"))
##Iho
Skin.sa <- (4 * tf("Bw") + 7) / (tf("Bw") + 90) * 10000 #Lasketaan ihon kokonaispinta-ala
###Maaperä
Soil.derm <- C.soil * tf("Soil.ad.skin") * 0.000001 * Skin.sa * tf("F.skin.soil") * Abs.skin.soil * tf("Ef.soil") / (tf("Bw") * tf("At"))
###Pesuvesi
Bw.derm <- C.bw * 0.001 * Kp * tf("Ef.bw") * tf("Ed.bw") * Skin.sa * tf("F.skin.bw") / (tf("Bw") * tf("At"))
###Pintavesi
Sw.derm <- C.sw * 0.001 * Kp * tf("Ef.sw") * tf("Ed.sw") * Skin.sa * tf("F.skin.sw") / (tf("Bw") * tf("At"))
#Laskennan jälkeen lisätään yhteiset sarakkeet col.common ja kootaan altistuminen kaikkien altistumisreittien kautta allekkain yhteen tauluun.
common <- merge(unique(data[col.common]), data.frame(temp=1))[-(length(col.common)+1)]
out <- data.frame(common, Altistumisreitti = rep(c("Hengitystiet", "Juomavesi", "Maaperä (ruuansulatuskanava)", "Vihannekset", "Juurekset", "Marjat", "Pintavesi (ruuansulatuskanava)", "Maaperä (iho)", "Pesuvesi (iho)", "Pintavesi (iho)", "Taustasaanti"), each = nrow(common)), Result = c(Air.inh, Dw.ing, Soil.ing, Lfc.ing, Tfc.ing, Berries.ing, Sw.ing, Soil.derm, Bw.derm, Sw.derm, Background.intake.adult, Background.intake.child))
return(out)
}
#################Funktio ympäristön terveysperusteisen laadun tarkasteluun
Health.based.environmental.quality <- function(Concentration, EQC){
#Ympäristöpitoisuuksien vertailu haitta-aineen terveysperusteisiin ohjearvopitoisuuksiin
HEQ.air.outdoor <- C.air.outdoor / HEQC.air.outdoor #Ulkoilma
HEQ.air.indoor <- C.air.indoor / HEQC.air.indoor #Sisäilma
HEQ.dw <- C.dw / HEQC.dw #Juomavesi
HEQ.soil <- C.soil / HEQC.soil #Maaperä
HEQ.lfc <- C.lfc / HEQC.lfc #Vihannekset
HEQ.tfc <- C.tfc / HEQC.tfc #Juurekset
HEQ.berries <- C.berries / HEQC.berries #Marjat
HEQ.sw <- C.sw / HEQC.sw #Pintavesi
out <- data.frame(Väliaine = c("Ulkoilma", "Sisäilma", "Juomavesi", "Maaperä", "Vihannekset", "Juurekset", "Marjat", "Pintavesi"), Result = c(HEQ.air.outdoor, HEQ.air.indoor, HEQ.dw, HEQ.soil, HEQ.lfc, HEQ.tfc, HEQ.berries, HEQ.sw))
return(out)
}
#################Funktio väestön ympäristöperäisestä haitta-ainealtistumisesta aiheutuvan terveysriskin karakterisointiin
Health.risk.characterisation.of.chronic.exposure.to.toxic.substances <- function(Exposure, Toxicity){
###Päivittäinen kokonaissaanti
#####expo = Chronic.environmental.exposure.to.toxic.substances -funktion tuottama altistumistaulu
Tot.intake.adult <- expo[expo$Henkilö == "Aikuinen",]
Tot.intake.adult <- sum(Tot.intake.adult$Result,na.rm=TRUE)
HQ.intake.adult <- Tot.intake.adult / TDI
MOS.intake.adult <- NOAEL.ing / Tot.intake.adult
Tot.intake.child <- expo[expo$Henkilö == "Lapsi",]
Tot.intake.child <- sum(Tot.intake.child$Result,na.rm=TRUE)
HQ.intake.child <- Tot.intake.child / TDI
MOS.intake.child <- NOAEL.ing / Tot.intake.child
Tot.intake.lifetime <- (Tot.intake.child * 6 + Tot.intake.adult * 64) / 70
HQ.intake.lifetime <- Tot.intake.lifetime / TDI
MOS.intake.lifetime <- NOAEL.ing / Tot.intake.lifetime
###Päivittäinen hengitystiealtistuminen
#####Keskimääräinen hengitysilman haitta-ainepitoisuus eri altistujatyypeillä
Ef.air.indoor <- data[data$Lyhenne == "Ef.air.indoor",]
Ef.air.indoor.adult <- (Ef.air.indoor[Ef.air.indoor$Henkilö == "Aikuinen",])$Result
Ef.air.indoor.child <- (Ef.air.indoor[Ef.air.indoor$Henkilö == "Lapsi",])$Result
C.inhaled.air.adult <- (C.air.outdoor * ((24 - Ef.air.indoor.adult) / 24)) + (C.air.indoor * (Ef.air.indoor.adult / 24))
C.inhaled.air.child <- (C.air.outdoor * ((24 - Ef.air.indoor.child) / 24)) + (C.air.indoor * (Ef.air.indoor.child / 24))
C.inhaled.air.lifetime <- (C.inhaled.air.child * 6 + C.inhaled.air.adult * 64) / 70
HQ.inhalation.adult <- C.inhaled.air.adult / TCA
MOS.inhalation.adult <- NOAEC.inh / C.inhaled.air.adult
HQ.inhalation.child <- C.inhaled.air.child / TCA
MOS.inhalation.child <- NOAEC.inh / C.inhaled.air.child
HQ.inhalation.lifetime <- C.inhaled.air.lifetime / TCA
MOS.inhalation.lifetime <- NOAEC.inh / C.inhaled.air.lifetime
###Elinikäinen syöpäriski
Cancer.risk.intake <- Tot.intake.lifetime * Cancer.unit.risk.intake
Cancer.cases.intake <- Cancer.risk.intake * Population
Cancer.risk.inhalation <- C.inhaled.air.lifetime * Cancer.unit.risk.inhalation
Cancer.cases.inhalation <- Cancer.risk.inhalation * Population
###Kootaan kaikki riski-indikaattorit yhteen tauluun
Noncancer.risk <- data.frame(Altistumisreitti = rep(c("Kokonaissaanti", "Hengitystiet"), each=6), Terveysvaikutus = c("Muu kuin genotoksinen karsinogeneesi"), Riski.indikaattori = rep(rep(c("Vaaraosamäärä (HQ)", "Turvamarginaali (MOS)"), each=3), times=2), Altistumistaso = c("Aikuinen", "Lapsi", "Elinikäinen"), Result = c(HQ.intake.adult, HQ.intake.child, HQ.intake.lifetime, MOS.intake.adult, MOS.intake.child, MOS.intake.lifetime, HQ.inhalation.adult, HQ.inhalation.child, HQ.inhalation.lifetime, MOS.inhalation.adult, MOS.inhalation.child, MOS.inhalation.lifetime))
Cancer.risk <- data.frame(Altistumisreitti = rep(c("Kokonaissaanti", "Hengitystiet"), each=2), Terveysvaikutus = c("Genotoksinen karsinogeneesi"), Riski.indikaattori =c("Yksilön syöpäriski (per 100 000)", "Odotetut syöpätapaukset väestössä"), Altistumistaso = c("Elinikäinen"), Result = c(Cancer.risk.intake*100000, Cancer.cases.intake, Cancer.risk.inhalation*100000, Cancer.cases.inhalation))
out <- merge(Noncancer.risk, Cancer.risk, all=TRUE)
return(out)
}
| |