You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言gawdis函数报错:names属性长度与向量不匹配求助

解决gawdis函数计算Gower距离的报错问题

问题背景

硕士生态学作业要求:

  • 使用FD包的tussock数据集,选择8个性状:height、LDMC、leafN、leafS、leafP、SLA、raunkiaer、pollination
  • 将定量数据转换为对数尺度以控制方差
  • 用gawdis函数计算Gower距离,指定LDMC、leafN、leafS、leafP、SLA为同一叶性状组

前序代码运行正常,但调用gawdis时出现报错。

原代码

library(FD)
library(gawdis)
library(ade4)
library(dplyr)

# 加载数据
data("tussock")
str(tussock)

# 提取群落矩阵
dim(tussock$abun)
head(tussock$abun)
comm <- tussock$abun
head(comm)
class(comm)

# 提取性状矩阵
tussock$trait
head(tussock$trait)
traits <- tussock$trait

class(tussock$abun)
class(tussock$trait)

# 选择目标性状
traits2 <- traits[, c("height", "LDMC", "leafN", "leafS", "leafP", "SLA", "raunkiaer", "pollination")]
head(traits2)

# 移除指定物种
traits2 <- traits2[!rownames(traits2) %in% c("Cera_font", "Pter_veno"),]
traits2

# 定量数据转对数尺度
traits2 <- traits2 |> mutate_if(is.numeric, log)

# 计算Gower距离
gaw_groups <- gawdis::gawdis (traits2,
                              groups.weight = T,
                              groups = c("LDMC", "leafN", "leafS", "leafP", "SLA"))
attr(gaw_groups, "correls")

报错信息

Error in names(w3) <- dimnames(x)[[2]] : 
  'names' attribute [8] must be the same length as the vector [5]
In addition: Warning message:
In matrix(rep(w, nrow(d.raw)), nrow = p, ncol = nrow(d.raw)) :
  data length [6375] is not a sub-multiple or multiple of the number of rows [8]  

报错原因

gawdis函数的groups参数要求是与性状列数长度一致的向量,每个元素对应一列性状的组标签,而非仅列出某一组内的性状名称。原代码中groups只传入了5个叶性状名称,而traits2有8列性状,长度不匹配导致报错。

解决方案

构造长度为8的组标签向量,将LDMC、leafN、leafS、leafP、SLA标记为同一组(比如"leaf_traits"),其余性状各为单独组:

修正后的代码

library(FD)
library(gawdis)
library(ade4)
library(dplyr)

# 加载数据
data("tussock")
str(tussock)

# 提取群落矩阵
dim(tussock$abun)
head(tussock$abun)
comm <- tussock$abun
head(comm)
class(comm)

# 提取性状矩阵
tussock$trait
head(tussock$trait)
traits <- tussock$trait

class(tussock$abun)
class(tussock$trait)

# 选择目标性状
traits2 <- traits[, c("height", "LDMC", "leafN", "leafS", "leafP", "SLA", "raunkiaer", "pollination")]
head(traits2)

# 移除指定物种
traits2 <- traits2[!rownames(traits2) %in% c("Cera_font", "Pter_veno"),]
traits2

# 定量数据转对数尺度
traits2 <- traits2 |> mutate_if(is.numeric, log)

# 构造组标签向量:8个元素对应8列性状
group_labels <- c("height", 
                  "leaf_traits", "leaf_traits", "leaf_traits", "leaf_traits", "leaf_traits", 
                  "raunkiaer", "pollination")

# 计算Gower距离
gaw_groups <- gawdis::gawdis(traits2,
                              groups.weight = TRUE,
                              groups = group_labels)
attr(gaw_groups, "correls")

内容的提问来源于stack exchange,提问作者Jonas Rosa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:32:43