2010-04-26 44 views
16

Tôi đang sử dụng gói quantmod để nhập dữ liệu chuỗi tài chính từ Yahoo.Làm cách nào để đổi tên đối tượng R?

library(quantmod) 
getSymbols("^GSPC") 
[1] "GSPC" 

Tôi muốn đổi tên đối tượng "GSPC" thành "SPX". Tôi đã thử chức năng đổi tên trong gói định dạng lại, nhưng nó chỉ thay đổi tên biến. Đối tượng "GSPC" có vectơ GSPC.Open, GSPC.High, v.v. Tôi muốn đổi tên "GSPC" thành "SPX" để thay đổi GSPC.Open thành SPX.Open và cứ thế.

Trả lời

28

Đổi tên một đối tượng và các colnames bên trong nó là một quá trình hai bước:

SPY <- GSPC# assign the object to the new name (creates a copy) 
colnames(SPY) <- gsub("GSPC", "SPY", colnames(SPY)) # rename the column names 

Nếu không, getSymbols chức năng cho phép bạn không auto assign, trong trường hợp này bạn có thể bỏ qua bước đầu tiên (bạn sẽ vẫn cần phải đổi tên các cột).

SPY <- getSymbols("^GSPC", auto.assign=FALSE) 

Cảm nhận từ @backlin

R sử dụng cái gọi là đánh giá lười biếng. Một hiệu ứng của điều đó là khi bạn "sao chép" SPY <- GSPC bạn không thực sự phân bổ không gian mới trong bộ nhớ cho SPY. R biết các đối tượng giống hệt nhau và chỉ tạo một bản sao mới trong bộ nhớ nếu một trong số chúng được sửa đổi (tức là khi chúng không còn giống hệt, ví dụ: khi bạn thay đổi tên cột trên dòng sau). Vì vậy, bằng cách làm

SPY <- GSPC 
rm(GSPC) 
colnames(SPY) <- gsub("GSPC", "SPY", colnames(SPY)) 

bạn không bao giờ thực sự sao chép GSPC nhưng chỉ đơn thuần cung cấp cho nó một cái tên mới (SPY) và sau đó nói với R để quên tên đầu tiên (GSPC). Khi bạn thay đổi tên cột, bạn không cần phải tạo một bản sao mới của SPYGSPC không còn tồn tại, có nghĩa là bạn đã thực sự đổi tên đối tượng mà không tạo bản sao trung gian.

+0

Hàm gsub() hoạt động hoàn hảo cho mục đích của tôi. Cảm ơn một lần nữa Shane. – Milktrader

+10

Điều này làm tôi bối rối một thời gian, vì vậy tôi muốn thêm phần vào đánh giá lười biếng để làm rõ nó cho những người khác nữa. Tôi có bộ nhớ và thời gian đã lược tả ví dụ để xác minh rằng điều này thực sự là những gì xảy ra bên trong R. – Backlin

+7

cảm ơn cho lưu ý về đánh giá lười biếng! –

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