====== Common: Cation 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_cation <- function (wtp_data, count=12, ...) { data <- wtp_data[,grep("_wtp", names(wtp_data))]; mass_factors <- c(); cat_counts <- c(); cat_names <- c(); for (wtname in names(data)) { oxname <- gsub('_wtp', "", wtname); oxconst = subset(oxides,oxide==oxname) catconst = subset(elements,element==oxconst$cation) anconst = subset(elements,element==oxconst$anion) mass_factors <- c(mass_factors, catconst$weight*oxconst$cation_count+anconst$weight*oxconst$anion_count); if (oxconst$cation_count > 0) cat_counts <- c(cat_counts, oxconst$cation_count) else cat_counts <- c(cat_counts, 1); cat_names <- c(cat_names, oxconst$cation); } data <- rowApply('/',data,mass_factors); data <- rowApply('*',data,cat_counts); data_sum_norm <- rowSums(data) / count; data <- data / data_sum_norm; names(data) <- paste0(cat_names,'_pfu'); return(cbind(Name=wtp_data$Name,data)); } {{tag> order11}}