2016-05-22 9 views
2

I folgenden Faktorvariable habe:scheinbare Anomalie in einer Grundfunktion von R

> vect 
    [1] C E D E E B C D B E D D C D E C A B B A D C E E C A C C B A B B A A D C C B D B A E B B D E C D C C B D D B D E C B A E C A 
[63] D C E A D C B E B A A C E A A C A B B A A C E D C E E B A B E C E B C E B D 
Levels: A B C D E 
> 
> str(vect) 
Factor w/ 5 levels "A","B","C","D",..: 3 5 4 5 5 2 3 4 2 5 ... 
> 
> dput(vect) 
structure(c(3L, 5L, 4L, 5L, 5L, 2L, 3L, 4L, 2L, 5L, 4L, 4L, 3L, 
4L, 5L, 3L, 1L, 2L, 2L, 1L, 4L, 3L, 5L, 5L, 3L, 1L, 3L, 3L, 2L, 
1L, 2L, 2L, 1L, 1L, 4L, 3L, 3L, 2L, 4L, 2L, 1L, 5L, 2L, 2L, 4L, 
5L, 3L, 4L, 3L, 3L, 2L, 4L, 4L, 2L, 4L, 5L, 3L, 2L, 1L, 5L, 3L, 
1L, 4L, 3L, 5L, 1L, 4L, 3L, 2L, 5L, 2L, 1L, 1L, 3L, 5L, 1L, 1L, 
3L, 1L, 2L, 2L, 1L, 1L, 3L, 5L, 4L, 3L, 5L, 5L, 2L, 1L, 2L, 5L, 
3L, 5L, 2L, 3L, 5L, 2L, 4L), .Label = c("A", "B", "C", "D", "E" 
), class = "factor") 

Wenn ich versuche, seinen Mittelwert zu berechnen, erhalte ich einen Fehler (entsprechend). Allerdings, wenn ich versuche, seine Standardabweichung zu bekommen, kann ich es bekommen:

> mean(vect) 
[1] NA 
Warning message: 
In mean.default(vect) : argument is not numeric or logical: returning NA 
> sd(vect) 
[1] 1.388954 
> 

Ich dachte, mean() und sd() Funktionen sollten Faktorvariablen in ähnlicher Weise behandeln. Wo ist das Problem? Danke für deine Kommentare.

Edit: die Version ist:

> R.version 

platform  i486-slackware-linux-gnu  
arch   i486       
os    linux-gnu     
system   i486, linux-gnu    
status          
major   3       
minor   2.2       
year   2015       
month   08       
day   14       
svn rev  69053      
language  R       
version.string R version 3.2.2 (2015-08-14) 
nickname  Fire Safety     
+0

@Zheyuan Ich bin keine Warnung auf meinem System zu bekommen. – rnso

+0

@RichardScriven Das ist der springende Punkt. SD-Funktion sollte auch diese Überprüfungen durchführen (es sollte sich ähnlich wie Mittelwert verhalten). – rnso

+0

3.2.2: in Frage gestellt. – rnso

Antwort

5

Auf der derzeit neuesten R Version 3.3.0, ich die folgende Warnung auf sd(vect) erhalten:

> sd(vect) 
[1] 1.388954 
Warning message: 
In var(if (is.vector(x) || is.factor(x)) x else as.double(x), na.rm = na.rm) : 
    Calling var(x) on a factor x is deprecated and will become an error. 
    Use something like 'all(duplicated(x)[-1L])' to test for a constant vector. 

Also gehe ich davon aus Sie nicht verwenden Der letzte R-Kernel hat Sie daher gebeten, sessionInfo() oder etwas anderes hinzuzufügen. Jetzt sind Sie auf R 3.2.2. Also müssen wir auf R CRAN gehen, um zu sehen, was geändert wurde, nicht nur in 3.3.0, sondern in allen Versionen seit 3.2.2. In R CRAN Seite: https://cran.r-project.org/, gibt es ein was Link neu:

what's new

Leider habe ich in einem Bild zu setzen, weil es keine spezielle Web-Adresse für diesen Link.

die folgende Zeile unter BUGFIXES in R 3.2.3:

var() und damit sd() warnen Faktor Argumente, die jetzt veraltet sind. (PR # 16564)

change log

wir vergrößern:

zoom in