2014-06-05 7 views
9

Ich habe einen unerwarteten [für mich mindestens] Fehler bei der Berechnung einer Standardabweichung. Die Idee [*] besteht darin, alle fehlenden Werte in 1 und 0 umzuwandeln. Extrahieren Sie dann Variablen mit einigen [aber nicht allen] fehlenden Werten, bevor eine Korrelation erfolgt. Dieser Extraktionsschritt wird mit einer SD-Funktion versucht, schlägt jedoch [warum?] Fehl.Standardabweichung auf Datenrahmen funktioniert nicht

library(VIM) 
data(sleep) # dataset with missing values 

x = as.data.frame(abs(is.na(sleep))) # converts all NA to 1, otherwise 0 
y = x[which(sd(x) > 0)] # attempt to extract variables with missing values 

Error in is.data.frame(x) : 
(list) object cannot be coerced to type 'double' 

# convert to double  
z = as.data.frame(apply(x, 2, as.numeric)) 
y = z[which(sd(z) > 0)] 

Error in is.data.frame(x) : 
(list) object cannot be coerced to type 'double' 

[*] R in Aktion, Robert Kabacoff

Antwort

13

sd auf data.frames ist seit dem R-3.0.0 nicht mehr existierenden gewesen:

> ## Build a db of all R news entries. 
> db <- news() 
> ## sd 
> news(grepl("sd", Text), db=db) 
Changes in version 3.0.3: 

PACKAGE INSTALLATION 

    o The new field SysDataCompression in the DESCRIPTION file allows 
     user control over the compression used for sysdata.rda objects in 
     the lazy-load database. 

Changes in version 3.0.0: 

DEPRECATED AND DEFUNCT 

    o mean() for data frames and sd() for data frames and matrices are 
     defunct. 

Verwenden sapply(x, sd) statt.

+1

Danke Joshua. Dies sind ziemlich wichtige Funktionen und es bricht etwas von dem Code, den ich habe. :-(. – Henk

+0

@Henk: Ja, es verursachte Probleme für einige CRAN-Pakete zu der Zeit. –

+5

@Henk Sie können Ihre eigenen "mean.data.frame" und "sd.data.frame" -Funktionen leicht definieren, wenn Sie Ich möchte nicht durch Ihren alten Code gehen und ihn ändern – Roland

Verwandte Themen