С небольшим количеством поисков я нашел информацию о периодической таблице в this example code project. У них была база данных Access с информацией о элементах. Я экспортировал его в this gist. Вы можете импортировать данные с помощью httr
библиотеки с
library(httr)
dd <- read.table(text=content(GET("https://gist.githubusercontent.com/MrFlick/c1183c911bc5398105d4/raw/715868fba2d0d17a61a8081de17c468bbc525ab1/elements.txt")), sep=",", header=TRUE)
(Вы должны, вероятно, создать свою собственную локальную версию для облегчения загрузки в будущем.)
Тогда ваша другая задача разлагается что-то вроде «СН4» в подсчитывается исходный элемент. Я создал эту вспомогательную функцию, которая, я думаю, делает то, что вам нужно.
decompose <- function(x) {
m <- gregexpr("([A-Z][a-z]?)(\\d*)", x, perl=T)
dx <- Map(function(x, y) {
ElementSymbol <- gsub("\\d","", x)
cnt <- as.numeric(gsub("\\D","", x))
cnt[is.na(cnt)]<-1
cbind(Sym=y, as.data.frame(xtabs(cnt~ElementSymbol)))
}, regmatches(x,m), x)
do.call(rbind, dx)
}
Здесь я проверить функцию
test_input <- c("H2O","CH4")
decompose(test_input)
# Sym ElementSymbol Freq
# 1 H2O H 2
# 2 H2O O 1
# 3 CH4 C 1
# 4 CH4 H 4
Теперь мы можем объединить данные и справочную информацию, чтобы сделать сюжет
library(ggplot2)
ggplot(merge(decompose("CH4"), dd), aes(Column, -Row)) +
geom_tile(data=dd, aes(fill=GroupName), color="black") +
geom_text(aes(label=Freq))
Ясно Есть возможности для но это должно дать вам хорошее начало.
Вы можете найти более надежную функцию декомпозиции. Похоже, CHNOSZ
пакет имеет один
library(CHNOSZ)
data(thermo)
decompose <- function(x) {
do.call(`rbind`, lapply(x, function (x) {
z <- makeup(x)
cbind(data.frame(ElementSymbol = names(z),Freq=z), Sym=x)
}))
}
ggplot(merge(decompose("CaAl2Si2O7(OH)2*H2O"), dd), aes(Column, -Row)) +
geom_tile(data=dd, aes(fill=GroupName), color="black") +
geom_text(aes(label=Freq))
Я нашел эту страницу, чтобы быть очень полезным: http://chepec.se/2014/11/16/element-data.html – wdkrnls