当应用于数据框时,“ mutate”的奇怪行为

时间:2019-04-18 01:20:19

标签: r tidyr

我正在尝试在数据框中的mutate列中character,结果应返回另一个character列,但实际上该列中的某些元素会转换为{ {1}}。这怎么可能发生?

这是数据帧,numericsumspec都是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]")
+     ))

0 个答案:

没有答案