我正在尝试对
chemical_formula
向量中每个元素的原子数求和:
chemical_formula <- c("CaF2", "Ca3(PO4)2", "FePO4", "KCl", "K3PO4", "K2SO4", "Mg3(PO4)2", "NaCl",
"Na3PO4", "Na2SO4", "SiO2", "CaSO4", "KAsO2", "KBr", "KI", "LiCl", "MnSO4", "CaS", "CuAsHO3",
"AlK(SO4)2", "(H2O)12", "ZnCl2", "CaCO3", "NaHCO3", "AsI3", "AuCl4Na", "Se", "K2Cr2O7")
cell_salts_atoms <- CHNOSZ::makeup(chemical_formula)
# > CHNOSZ::makeup(chemical_formula)
# [[1]]
# Ca F
# 1 2
#
# [[2]]
# Ca O P
# 3 8 2
#
# [[3]]
# Fe P O
# 1 1 4
#
# [[4]]
# K Cl
# 1 1
#
# [[5]]
# K P O
# 3 1 4
#
# [[6]]
# K S O
# 2 1 4
#
# [[7]]
# Mg O P
# 3 8 2
#
# [[8]]
# Na Cl
# 1 1
#
# [[9]]
# Na P O
# 3 1 4
#
# [[10]]
# Na S O
# 2 1 4
#
# [[11]]
# Si O
# 1 2
#
# [[12]]
# Ca S O
# 1 1 4
#
# [[13]]
# K As O
# 1 1 2
#
# [[14]]
# K Br
# 1 1
#
# [[15]]
# K I
# 1 1
#
# [[16]]
# Li Cl
# 1 1
#
# [[17]]
# Mn S O
# 1 1 4
#
# [[18]]
# Ca S
# 1 1
#
# [[19]]
# Cu As H O
# 1 1 1 3
#
# [[20]]
# Al K O S
# 1 1 8 2
#
# [[21]]
# H O
# 24 12
#
# [[22]]
# Zn Cl
# 1 2
#
# [[23]]
# Ca C O
# 1 1 3
#
# [[24]]
# Na H C O
# 1 1 1 3
#
# [[25]]
# As I
# 1 3
#
# [[26]]
# Au Cl Na
# 1 4 1
#
# [[27]]
# Se
# 1
#
# [[28]]
# K Cr O
# 2 2 7
cell_salts_atoms_matrix <- lapply(cell_salts_atoms, as.matrix)
# > cell_salts_atoms_matrix
# [[1]]
# [,1]
# Ca 1
# F 2
#
# [[2]]
# [,1]
# Ca 3
# O 8
# P 2
#
# [[3]]
# [,1]
# Fe 1
# P 1
# O 4
#
# [[4]]
# [,1]
# K 1
# Cl 1
#
# [[5]]
# [,1]
# K 3
# P 1
# O 4
#
# [[6]]
# [,1]
# K 2
# S 1
# O 4
#
# [[7]]
# [,1]
# Mg 3
# O 8
# P 2
#
# [[8]]
# [,1]
# Na 1
# Cl 1
#
# [[9]]
# [,1]
# Na 3
# P 1
# O 4
#
# [[10]]
# [,1]
# Na 2
# S 1
# O 4
#
# [[11]]
# [,1]
# Si 1
# O 2
#
# [[12]]
# [,1]
# Ca 1
# S 1
# O 4
#
# [[13]]
# [,1]
# K 1
# As 1
# O 2
#
# [[14]]
# [,1]
# K 1
# Br 1
#
# [[15]]
# [,1]
# K 1
# I 1
#
# [[16]]
# [,1]
# Li 1
# Cl 1
#
# [[17]]
# [,1]
# Mn 1
# S 1
# O 4
#
# [[18]]
# [,1]
# Ca 1
# S 1
#
# [[19]]
# [,1]
# Cu 1
# As 1
# H 1
# O 3
#
# [[20]]
# [,1]
# Al 1
# K 1
# O 8
# S 2
#
# [[21]]
# [,1]
# H 24
# O 12
#
# [[22]]
# [,1]
# Zn 1
# Cl 2
#
# [[23]]
# [,1]
# Ca 1
# C 1
# O 3
#
# [[24]]
# [,1]
# Na 1
# H 1
# C 1
# O 3
#
# [[25]]
# [,1]
# As 1
# I 3
#
# [[26]]
# [,1]
# Au 1
# Cl 4
# Na 1
#
# [[27]]
# [,1]
# Se 1
#
# [[28]]
# [,1]
# K 2
# Cr 2
# O 7
我希望结果类似于以下内容:
Se 1
Au 1
As 2
Ca 6
我已经尝试过
cell_salts_atoms_sum <- lapply(cell_salts_atoms, sum)
;但是,这仅提供每个列表元素的总和,而不是每个命名组件的总和。
产生预期结果的最佳方法是什么?
也许是这样的:
library(dplyr)
atoms <- unlist(cell_salts_atoms)
tibble(name = names(atoms), value = atoms) %>%
summarise(total_atoms = sum(value), .by = name)
一种方法是:
data.table::rbindlist(lapply(cell_salts_atoms, as.list), fill = TRUE) |>
colSums(na.rm = TRUE)
# Ca F O P Fe K Cl S Mg Na Si As Br I Li Mn Cu H Al Zn C Au Se Cr
# 7 2 84 7 1 12 9 7 3 8 1 3 1 4 1 1 1 26 1 1 2 1 1 2