【发布时间】:2011-08-10 14:30:48
【问题描述】:
假设我有一个像“C5Cl2NO2S”这样的分子式,我想在 R 中计算其分子量。我虽然最简单的方法是使用正则表达式,分析公式并将其拆分为元素组件,然后将它们交给执行计算的单独函数。但是,我面临的问题是,当我交出我的 RegEx 的反向引用时,它们不会被评估而是以“\\1”、“\\2”的形式提交。
这是我的尝试:
masses <- list(
C = 12,
H = 1.01,
Cl = 34.97,
N = 14.00,
O = 15.99,
P = 30.97,
S = 31.97
)
elementMass <- function( element, count ) {
if( count == "" ) {
count <- "1"
}
return( as.character( masses[[ element ]] * as.numeric( count ) ) )
}
sumFormula2Mass <- function( x ){
y <- 0.0
for( e in x ) {
if( e != "" ) {
y <- y + as.numeric( sub( "^(C|H|Cl|N|O|P|S)([0-9]*)$", elementMass("\\1", "\\2"), e ) )
}
}
return( y )
}
sub(
"^(C[0-9]*)?(H[0-9]*)?(Cl[0-9]*)?(N[0-9]*)?(O[0-9]*)?(P[0-9]*)?(S[0-9]*)?$",
sumFormula2Mass( c("\\1", "\\2", "\\3", "\\4", "\\5", "\\6", "\\7") ),
"C5Cl2NO2S"
)
任何想法如何改善这一点? 非常感谢
【问题讨论】: