2014-06-05 21 views
9

Tôi gặp lỗi [ít nhất đối với tôi ít nhất] không mong muốn khi tính toán độ lệch chuẩn. Ý tưởng [*] là chuyển đổi tất cả các giá trị còn thiếu thành 1 và 0 nếu không. Sau đó trích xuất các biến có một số giá trị bị thiếu [nhưng không phải tất cả], trước khi thực hiện tương quan. Bước khai thác đó đã được thử với một chức năng sd, nhưng nó không thành công [tại sao?].độ lệch chuẩn trên dataframe không hoạt động

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 trong hành động, Robert Kabacoff

Trả lời

13

sd trên data.frames đã không còn tồn tại kể từ khi R-3.0.0:

> ## 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. 

Sử dụng sapply(x, sd) để thay thế.

+1

Cảm ơn Joshua. Đây là những chức năng khá quan trọng và nó phá vỡ một số mã mà tôi có. :-( – Henk

+0

@Henk: vâng, nó gây ra vấn đề cho một vài gói CRAN vào lúc đó –

+5

@Henk Bạn có thể định nghĩa các hàm 'mean.data.frame' và' sd.data.frame' của riêng mình một cách dễ dàng nếu bạn không muốn đi qua mã di sản của bạn và thay đổi nó – Roland

Các vấn đề liên quan