Common: Atomic WTP to ATP

Пересчет весовых процентов оксидов на атомные проценты.

Details

Reference
Input wtp
Results atp

Использовать Проверить

  • заголовок
  • краткое описание
  • статья
  • ссылка
  • карточка
  • подробное описание
  • код
  • тест

Source

elements <- read.csv("constants_elements.csv",stringsAsFactors=F);

recalc.wtp_at_to_atp <- function (wtp_data, ...)
{
  data <- wtp_data[,grep("_wtp", names(wtp_data))];
  
  data_atp = data.frame(Name=wtp_data$Name);

  mw <- c();

  for (wtnamew in names(data))
  {
  wtname <- gsub('_wtp', "", wtnamew);
  
  econst = subset(elements,element==wtname) 
  mw <- c(mw,c(1/econst$weight));
  
  }

  data_st1 <- data/100;
  data_st2 <- rowApply('*',data_st1,mw);
  st2_sum <- rowSums(data_st2);
  data_st3 <- (data_st2/st2_sum)*100;

  names(data_st3) <- gsub("_wtp", "_atp", names(data_st3));
  
  data_atp <- cbind(data_atp, data_st3);
  
  return(data_atp);
}

recalc.wtp_at_to_atp.test <- function () {
  td <- data.frame(Name="test", S_wtp=19.87, Fe_wtp=34.32, Co_wtp=0.17,
                                Ni_wtp=0.16, As_wtp=45.29, Sb_wtp=0.37);

  td <- rbind(td,td)

  rs <- recalc.wtp_at_to_atp(td);

  expect_equal(object = rs$As_atp[1], 32.72, tolerance = 0.01);
  expect_equal(object = rs$As_atp[2], 32.72, tolerance = 0.01);
}