【问题标题】:How do I plot species number (specnumber()-function) with vegan package?如何使用 vegan 包绘制物种编号(specnumber()-function)?
【发布时间】:2021-07-21 13:13:27
【问题描述】:

我有两个数据框,构造如下:

env <- read.csv("ud_area.csv", header = T, sep = ";", row.names = 1)

com <- read.csv("com_1.csv", header = T, sep = ";", row.names = 1)

结构如下:

str(env)

**data.frame':  4 obs. of  1 variable:
 $ Area: chr  "BeetleBank" "BeetleBank" "Klee" "Klee"**

str(com)

**'data.frame': 4 obs. of  121 variables:**

**$ MT.1  : int  0 57 0 0**
 
**$ MT.2  : int  0 1 0 3**
 
**$ MT.3  : int  0 26 0 0** and so on...

然后我想调用并绘制 vegan 包中包含的 specnumber() 函数:

S<-specnumber(com)

plot(S ~ env$Area, ylab = "y", xlab = "x", ylim=c(0, 20), xlim=c(0,100))

我总是收到以下错误:强制转换引入的 NAs。

我多次控制 NA 的数据,这对我来说没有意义。此外,几个月前,当我使用其他数据运行脚本时,我没有遇到任何问题。现在,它也不适用于旧数据。这怎么可能?

【问题讨论】:

  • 由于缺乏信息,我只能猜测:如果您有警告消息(您没有显示),那么您的 data.frame 中可能有非数字数据。如果您没有收到警告,您可能有NA 值传播到NA 物种数量。如果你有非数字数据,sum(com) 也会报错。

标签: r plot na vegan


【解决方案1】:

面积应该是一个因素

plot(S ~ env$Area, ylab = "y", xlab = "x", ylim=c(0, 20), xlim=c(0,100))

但它是一个字符串。以下应该工作

plot(S ~ as.factor(env$Area), ylab = "y", xlab = "x", ylim=c(0, 20), xlim=c(0,100))

这是 R 4 中的一个令人费解的变化,它带来了很多痛苦:早期的 R 自动将字符串转换为因子,但从版本 4 开始将它们保留为字符字符串,许多统计函数不知道如何处理它们。

要保持 R 中的 pre-4 行为,您应该使用以下命令读取数据:

env <- read.csv("ud_area.csv", header = T, sep = ";", row.names = 1, stringsAsFactors = TRUE)

【讨论】:

    猜你喜欢
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多