【问题标题】:How to label CCA-Plot with row.names in R如何在 R 中用 row.names 标记 CCA-Plot
【发布时间】:2021-11-03 09:37:20
【问题描述】:

我一直在尝试解决以下问题,我确信这是一个简单的问题(我只是无法找到解决方案)。我正在使用 vegan 包,并希望执行一个 cca,将实际的行名称显示为标签(而不是默认的“sit1”、“sit2”……)。

我使用 cast() 创建了一个数据框 (ls_Treat1),将地块处理(AB、DB、DL 等)显示为行名称和物种出现。数据框如下所示:

species 1 species 2 species 3
AB 0 3 1
DB 1 6 0
DL 3 4 2

我使用以下代码创建了数据框,以将处理(AB、DB、DL、...)设置为行名称:

ls_Treat1 <- cast(fungi_ls, Treatment ~ species)
row.names(ls_Treat1)<- ls_Treat1$Treatment
ls_Treat1 <- ls_Treat1[,-1]

当我使用以下代码执行 cca 时:

ca <- cca(ls_Treat1)
plot(ca,display="sites") 

R 将默认标签“sit1”、“sit2”、... 放入绘图中,而不是实际的行名,即使我之前以这种方式执行过并且绘图通常显示正确的标签。这与我创建数据框有什么关系吗?我尝试将处理(字符)更改为数字(整数或因子),但仍然不会用我的行名标记该图。

谁能帮我解决这个问题?

非常感谢!!

【问题讨论】:

  • 您好,我无法重现您的代码。您可以添加有关您正在使用的所有软件包的信息吗?函数“cast”从何而来? fungus_ls 是包的内置数据集吗?或者您也可以为此提供代码,例如,fungi_ls
  • 您好,谢谢您的回答。对于 cast() 我正在使用包 reshape。 fungus_ls 是我合并的数据框(也与 reshape 合并): fungus_ls
  • 我的猜测是你没有你假设的行名。你从命令 rownames() 中得到什么?
  • 嗨,Jari,感谢您的评论,当我执行命令 rownames(ls_Treat1) 时,我得到以下结果: > rownames(ls_Treat1) [1] "AB" "AL" "AR" " AS" "CC" "DB" "DL" "DR" "DS"
  • 我认为您的输入数据中有问题:检查 cast() 给您的信息 - 我敢打赌,这不是标准数据框,而是一些混乱的东西。

标签: r dataframe label reshape vegan


【解决方案1】:

问题是reshape::cast() 不会产生data.frame 而是其他东西。它声称是data.frame,但事实并非如此。我们在cca 中进行矩阵代数,因此我们将输入转换为适用于标准data.frame 的矩阵,但它不适用于您作为输入提供的对象。特别是,在您删除ls_Treat1 &lt;- ls_Treat1[,-1] 中的第一列之后,您还删除了允许保留名称的属性——如果不删除此列(如果仍然加载 reshape 包),它会起作用。看来升级到 reshape2 包并使用reshape2::acast() 可能是一个解决方案。

【讨论】:

  • 您好 Jari,非常感谢您的回答和解决方案!我会试着看看我能从中得到什么!
  • 嗨,Jari,我刚刚按照您的建议进行了操作,并且成功了!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 2022-02-09
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2010-11-26
  • 2016-09-26
相关资源
最近更新 更多