如何使用素食包绘制物种编号(specnumber()-函数)?

How do I plot species number (specnumber()-function) with vegan package?

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

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))

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

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

区域应该是

的一个因素
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)