2012-09-12 23 views
45

Mã:Làm thế nào để ép buộc một đối tượng danh sách việc cần gõ 'đúp'

a <- structure(list(`X$Days` = c("10", "38", "66", "101", "129", "185", "283", 
           "374")), .Names = "X$Days") 

Sau đó a là như

$`X$Days` 
[1] "10" "38" "66" "101" "129" "185" "283" "374" 

Tôi muốn ép buộc a đến một loạt các giá trị số, nhưng ép buộc chức năng trả lại cho tôi

Error: (list) object cannot be coerced to type 'double' 

Xin cảm ơn,

Trả lời

81

Nếu bạn muốn chuyển đổi tất cả các yếu tố của a đến một đơn số vectorlength(a) lớn hơn 1 (OK, thậm chí nếu nó là có độ dài 1), bạn có thể unlist đối tượng đầu tiên và sau đó chuyển đổi.

as.numeric(unlist(a)) 
# [1] 10 38 66 101 129 185 283 374 

Lưu ý rằng không có bất kỳ kiểm soát chất lượng nào tại đây. Ngoài ra, X$Days một tên kỳ quặc hùng mạnh.

22

Nếu danh sách của bạn dưới dạng nhiều yếu tố cần được chuyển đổi thành số, bạn có thể đạt được điều này với lapply(a, as.numeric).

3

Bạn cũng có thể sử dụng danh sách subsetting để chọn yếu tố bạn muốn chuyển đổi. Sẽ hữu ích nếu danh sách của bạn có nhiều hơn 1 phần tử.

as.numeric(a[[1]])

0

Có vấn đề với một số dữ liệu. Xem xét:

as.double(as.character("2.e")) # This results in 2 

Một giải pháp:

get_numbers <- function(X) { 
    X[toupper(X) != tolower(X)] <- NA 
    return(as.double(as.character(X))) 
} 
Các vấn đề liên quan