2012-11-15 89 views
3

我嘗試從「素食」包中進行CA分析。CCA分析:rowSums(X)中的錯誤:'x'必須是數字

這是我使用的代碼:

install.packages("vegan") 
library(vegan) 

plots <- c("plotA", "plotB", "plotC", "plotD", "plotE") 
animal1 <- c(2,7,4,8,1) 
animal2 <- c(4,3,7,1,0) 
animal3 <- c(8,5,0,1,3) 
animal4 <- c(2,2,9,5,2) 
animal5 <- c(1,6,9,8,7) 

animalData <- data.frame (plots, animal1, animal2, animal3, animal4, animal5) 
attach(animalData) 

animalData.ca <- cca(animalData) 

不過,我總是得到一個錯誤: 「錯誤rowSums(X): 'X' 必須是數字」。 我知道標籤是一個因素,如果我刪除第一列,分析將起作用。但是,然後分析創建自己的標籤,我不能使用我的標籤。有沒有辦法讓我自己的標籤(plotA,plotB等)包括在內?

非常感謝提前。

.fidelfisch

+0

查看'data.frame'選項中的'row.names'選項?由'?data.frame' – liuminzhao

回答

2

你必須存儲爲animalData數據幀的rownames屬性plots變量,而不是如在實際的數據的變量。

你想:

library(vegan) 

plots <- c("plotA", "plotB", "plotC", "plotD", "plotE") 
animal1 <- c(2,7,4,8,1) 
animal2 <- c(4,3,7,1,0) 
animal3 <- c(8,5,0,1,3) 
animal4 <- c(2,2,9,5,2) 
animal5 <- c(1,6,9,8,7) 

animalData <- data.frame(animal1, animal2, animal3, animal4, animal5) 
rownames(animalData) <- plots 

animalData現在應該是這樣的:

> animalData 
     animal1 animal2 animal3 animal4 animal5 
plotA  2  4  8  2  1 
plotB  7  3  5  2  6 
plotC  4  7  0  9  9 
plotD  8  1  1  5  8 
plotE  1  0  3  2  7 

那麼對於CA

animalData.ca <- cca(animalData) 

它的工作原理:

> animalData.ca 
Call: cca(X = animalData) 

       Inertia Rank 
Total   0.3793  
Unconstrained 0.3793 4 
Inertia is mean squared contingency coefficient 

Eigenvalues for unconstrained axes: 
    CA1  CA2  CA3  CA4 
0.219528 0.099206 0.055572 0.005018 

繪製在

plot(animalData.ca, type = "text", scaling = 3) 

enter image description here

其中,你可以看到該對象的結果,已經從數據animalData幀中使用的屬性數據。

另外,不要attach()這樣的數據集;它不是必需的,事實上它是危險的,因爲數據沒有附加,而是一個獨立的副本。

+0

非常好。非常感謝!你節省了我的一天/周:-) – fidelfisch

相關問題