我正在尝试在数据框中的mutate
列中character
,结果应返回另一个character
列,但实际上该列中的某些元素会转换为{ {1}}。这怎么可能发生?
这是数据帧,numeric
和sumspec
都是rate.express
向量
character
现在变异该sumspec= c("TA","TCO2")
rate.express = c("(rNC-rPC)*RO2POC[i]*dstopw[i] + (rNC-rPC+4/3)*RNO2POC[i]*dstopw[i] + (rNC-rPC)*RNO3POC[i]*dstopw[i] + (rNC-rPC+4)*RMnO2POC[i]*dstopw[i] + (rNC-rPC+8)*RFeOOHPOC[i]*dstopw[i] + (rNC-rPC+1)*RSO4POC[i]*dstopw[i] + (rNC-rPC)*RCH4POC[i]*dstopw[i] + -2*RO2NH4[i] + -2*RO2Mn[i] + -1*RO2Mn_ads[i] + -2*RO2Fe[i] + -1*RO2Fe_ads[i] + -2*RO2H2S[i] + -2*RO2FeS[i]*dstopw[i] + -8/5*RNO3Mn[i] + -1.8*RNO3Fe[i] + 2*RSO4CH4[i] + -1*RMnO2Fe[i]*dstopw[i] + 2*RMnO2H2S[i]*dstopw[i] + 4*RFeOOHH2S[i]*dstopw[i] + -2*RFeS_pre[i]*dstopw[i] + 2*RFeS_dis[i]*dstopw[i] + 2*RCaCO3_dis[i]*dstopw[i] + -2*RCaCO3_pre[i]*dstopw[i] + 2*RMnCO3_dis[i]*dstopw[i] + -2*RMnCO3_pre[i]*dstopw[i] + 2*RFeCO3_dis[i]*dstopw[i] + -2*RFeCO3_pre[i]*dstopw[i] + 10*RAnnite_dis[i]",
"1*RO2POC[i]*dstopw[i] + 1*RNO2POC[i]*dstopw[i] + 1*RNO3POC[i]*dstopw[i] + 1*RMnO2POC[i]*dstopw[i] + 1*RFeOOHPOC[i]*dstopw[i] + 1*RSO4POC[i]*dstopw[i] + 0.5*RCH4POC[i]*dstopw[i] + 1*RO2CH4[i] + 1*RSO4CH4[i] + 1*RCaCO3_dis[i]*dstopw[i] + -1*RCaCO3_pre[i]*dstopw[i] + 1*RMnCO3_dis[i]*dstopw[i] + -1*RMnCO3_pre[i]*dstopw[i] + 1*RFeCO3_dis[i]*dstopw[i] + -1*RFeCO3_pre[i]*dstopw[i]")
rate.express
返回哪个
dH <- data.frame(sumspec,
rate.express) %>%
mutate(RHS = ifelse(
sumspec == "TA", rate.express,
paste0("-1.0*(",rate.express,")*dTA/d",sumspec,"[i]")
))
因此,变异> dH$RHS
[1] "1"
[2] "-1.0*(1*RO2POC[i]*dstopw[i] + 1*RNO2POC[i]*dstopw[i] + 1*RNO3POC[i]*dstopw[i] + 1*RMnO2POC[i]*dstopw[i] + 1*RFeOOHPOC[i]*dstopw[i] + 1*RSO4POC[i]*dstopw[i] + 0.5*RCH4POC[i]*dstopw[i] + 1*RO2CH4[i] + 1*RSO4CH4[i] + 1*RCaCO3_dis[i]*dstopw[i] + -1*RCaCO3_pre[i]*dstopw[i] + 1*RMnCO3_dis[i]*dstopw[i] + -1*RMnCO3_pre[i]*dstopw[i] + 1*RFeCO3_dis[i]*dstopw[i] + -1*RFeCO3_pre[i]*dstopw[i])*dTA/dTCO2[i]"
应该只返回第一个元素的原始值,但它将转换为数字。第二个元素是OK。我认为它已转换为rate.express
,因为
numeric
相反,如果我明确使用> as.numeric(dH$rate.express[1])
[1] 1
至as.character
rate.express
那么结果是正确的
> dH <- data.frame(sumspec,
+ rate.express) %>%
+ mutate(RHS = ifelse(
+ sumspec == "TA", as.character(rate.express), # explicitly state type
+ paste0("-1.0*(",rate.express,")*dTA/d",sumspec,"[i]")
+ ))