Code
library(plantecowrap)
data <- read.csv(
  system.file("extdata", "example_1.csv",
              package = "plantecowrap"),
  stringsAsFactors = FALSE
)plantecophys 软件包自推出后得到了广泛的关注,2021.11.7 我查了一下谷歌学术记录的引用量为 214 次,但作者对其更新的频率非常缓慢,毕竟离开了科研界。一些新特性的添加估计很难,而 plantecowrap 把二氧化碳响应拟合过程中一些重要的参数的温度响应添加了进去,除了那些基础文献外,主要的计算的主要理论依据来自于 (Bernacchi 等 2002; Medlyn 等 2002),目的是提供相关参数对温度响应的计算,可以作为对 plantecophys 相关功能的补充。
软件包介绍参考 章节 3,这里使用软件包自带的数据进行演示:
library(plantecowrap)
data <- read.csv(
  system.file("extdata", "example_1.csv",
              package = "plantecowrap"),
  stringsAsFactors = FALSE
)head(data)::: {.cell tbl-cap=’ ’} ::: {.cell-output-display}
| X | A | Ci | Tleaf | Press | PPFD | Treat | 
|---|---|---|---|---|---|---|
| 1 | 2.154595 | 75 | 10 | 100 | 2000 | 10 | 
| 2 | 2.733792 | 100 | 10 | 100 | 2000 | 10 | 
| 3 | 3.430289 | 150 | 10 | 100 | 2000 | 10 | 
| 4 | 3.834256 | 200 | 10 | 100 | 2000 | 10 | 
| 5 | 4.098002 | 250 | 10 | 100 | 2000 | 10 | 
| 6 | 4.283738 | 300 | 10 | 100 | 2000 | 10 | 
::: :::
这里使用的是示例数据。
fits <- fitacis2(
  data = data,
  varnames = list(
    ALEAF = "A",
    Tleaf = "Tleaf",
    Ci = "Ci",
    PPFD = "PPFD",
    Rd = "Rd",
    Press = "Press"
  ),
  group1 = "Treat",
  fitTPU = FALSE,
  fitmethod = "bilinear",
  gm25 = 10000,
  #Allows fitting on an ACi rather than ACc-basis
  Egm = 0
)
outputs <- acisummary(data, group1 = "Treat", fits = fits)到这里为止,如果熟悉 plantecophys 的话,一直没有什么新意,只是给 fitacis 改了个名字,然后给 25 摄氏度下的叶肉导度赋值了一个不可能的数据,这样是为了使用 Ci 的数据来进行拟合。下面是关键部分了:
tresp <- fit_topt_VJ(outputs)这里使用这个函数 fit_topt_VJ 来拟合 Vcmax 和 Jmax 对温度响应的曲线,要查看拟合的参数:
tresp[[2]]::: {.cell lable=‘wraps-para’ tbl-cap=’ ’} ::: {.cell-output-display}
| Parameter | k25 | Ea | Residual | BIC | 
|---|---|---|---|---|
| Vcmax | 75.1461 | 53.45129 | 73.99293 | 53.18597 | 
| Jmax | 148.6158 | 78.94620 | 60.95280 | 52.36863 | 
::: :::
这里是显示拟合参数,k25 是指 25 度时候的 Km,Ea 是活化能。响应图形的查看是:
tresp[[3]]
能直接看到 V_{cmax} 和 J_{max} 对温度的响应。
上面的示例是简单的演示,实际应用中肯定是要有很多分组的,分组代码如下,使用相似,为避免篇幅太长,这里的代码不再实际运行。
# eval: false
data2 <- read.csv(
  system.file("extdata", "example_2.csv",
              package = "plantecowrap"),
  stringsAsFactors = FALSE
)
head(data2)  X        A  Ci Tleaf Press PPFD Grouping
1 1 2.154595  75    10   100 2000     10_a
2 2 2.733792 100    10   100 2000     10_a
3 3 3.430289 150    10   100 2000     10_a
4 4 3.834256 200    10   100 2000     10_a
5 5 4.098002 250    10   100 2000     10_a
6 6 4.283738 300    10   100 2000     10_a
数据根据 Groping 分为了 a,b两组。
fits2 <- fitacis2(
  data = data2,
  varnames = list(
    ALEAF = "A",
    Tleaf = "Tleaf",
    Ci = "Ci",
    PPFD = "PPFD",
    Rd = "Rd",
    Press = "Press"
  ),
  group1 = "Grouping",
  fitTPU = FALSE,
  fitmethod = "bilinear",
  gm25 = 10000,
  Egm = 0
)
outputs <- acisummary(data2, group1 = "Grouping", fits = fits2)
outputs <-
  separate(
    outputs,
    col = "ID",
    into = c("Treat", "Block"),
    sep = "_"
  )
tresps <- fit_topt_VJs(data = outputs,
                       group = "Block")这里就是利用率分组信息来区分不同的数据组。和上面没太大区别。这里既然使用了多个分组,那么要获取对应的图形和参数,就麻烦一些,但是作者考虑了这一点,直接写好相关的函数,望文生义即可,就是代表字面意思:
pars <- get_t_pars(tresps)
pars
graphs <- get_t_graphs(tresps)
print_graphs(graphs, path = "./exist_dir")不过上面这段代码所有的内容实际上已经在 tresps 内了,这里仅仅是提取出来方便而已,需要注意,最后图形的导出看上去只是支持临时目录和当前目录,或者是已经存在的目录,即代码里没有做相关目录不存在就先创建目录的处理。