Править страницу Ссылки сюда Common: Oxygen method Наиболее примитивный метод расчета на заданное число атомов кислорода. Details Reference Input wtp Results pfu Использовать Проверить заголовок краткое описание статья ссылка карточка подробное описание код тест Source elements <- read.csv("constants_elements.csv",stringsAsFactors=F) oxides <- read.csv("constants_oxides.csv",stringsAsFactors=F) recalc.common_oxygen <- function (wtp_data, count=12, ...) { oxy_data = wtp_data[,grep("_wtp", names(wtp_data))]; ds = data.frame(); for (j in 1:nrow(oxy_data)) { row <- oxy_data[j,]; names(row) <- gsub('_wtp', "", names(oxy_data)); for ( i in 1:length(row)) { ox= names(row)[i] oxconst = subset(oxides,oxide==ox) catconst = subset(elements,element==oxconst$cation) anconst = subset(elements,element==oxconst$anion) row[[ox]] = (row[[ox]]/(catconst$weight*oxconst$cation_count+anconst$weight*oxconst$anion_count)); if (oxconst$anion == 'O' && oxconst$anion_count > 0) { row[[ox]] = row[[ox]] * oxconst$anion_count; } } csum = count/sum(row); for ( i in 1:length(row)) { ox= names(row)[i] oxconst = subset(oxides,oxide==ox); catconst = subset(elements,element==oxconst$cation) ; anconst = subset(elements,element==oxconst$anion) ; row[[paste0(oxconst$cation,'_pfu')]] = row[[ox]] * csum / oxconst$anion_count*oxconst$cation_count; } ds = rbind(ds,row) names(ds) <- names(row) } return(cbind(Name=wtp_data$Name,ds[,grep("_pfu", names(ds))])); } recalc.common_oxygen.test <- function () { src <- data.frame(Name='test',SiO2_wtp=37.50,TiO2_wtp=0.3,Al2O3_wtp=20.21,FeO_wtp=26.30,MnO_wtp=2.94,MgO_wtp=3.25,CaO_wtp=9.94); result <- recalc.common_oxygen (src, count = 12); expect_equal(object = result$Si_pfu, 2.978, tolerance = 0.001); expect_equal(object = result$Ti_pfu, 0.018, tolerance = 0.001); expect_equal(object = result$Al_pfu, 1.891, tolerance = 0.001); expect_equal(object = result$Fe_pfu, 1.746, tolerance = 0.001); expect_equal(object = result$Mn_pfu, 0.195, tolerance = 0.001); expect_equal(object = result$Mg_pfu, 0.385, tolerance = 0.001); expect_equal(object = result$Ca_pfu, 0.846, tolerance = 0.001); } order10 recalc/common_oxygen.txt Последние изменения: 2018/11/12 15:08(внешнее изменение) Войти