2012-08-02 30 views
17

Trong R, có thể chỉ định tên cho các thành phần của một véc tơ mà không cần gán vector đó cho một tên biến không? Theo cách thông thường là rõ ràng:Gán tên cho mục nhập vectơ mà không gán tên vectơ cho một tên biến?

z <- 1:3 
names(z) <- c("a", "b", "c") #normal way 
names(1:3) <- c("a", "b", "c") #throws an error 

Cách thứ hai ném "Lỗi trong tên (1: 3) < - c (" a", "b", "c"): mục tiêu của nhiệm vụ mở rộng để đối tượng phi ngôn ngữ"

Theo doc, khái niệm được đánh giá là

z <- "names<-"(z, 
    "[<-"(names(z), 3, "c2"))’. 

vì vậy, không sốc nó không hoạt động, tôi chỉ tự hỏi nếu có một công trình xung quanh.

Lý tưởng nhất, nó muốn được tốt đẹp để có một cái gì đó như:

names(z <- 1:3) <- c("a", "b", "c") 
> z 
a b c 
1 2 3 

Chỉ có vẻ như một sự lãng phí không gian để đưa về hai dòng khác nhau.

Trả lời

35

Làm thế nào để sử dụng setNames(), có vẻ sạch hơn/rõ ràng hơn lý tưởng được đề xuất của bạn?

z <- setNames(1:3, c("a", "b", "c")) 
# z 
# a b c 
# 1 2 3 
+1

chỉ cần kiểm tra, rõ ràng là thiết lập tên chỉ là một wrapper chức năng cho 'cách bình thường'. Vẫn là một tiết kiệm không gian, nhưng nó không làm bất cứ điều gì ưa thích. – zzk

+0

@zzk - Vâng, tôi cũng thấy điều đó (và cũng nhận thấy rằng nó nằm trong gói ** số liệu thống kê **, đủ kỳ quặc). Rõ ràng là một người khác mệt mỏi vì không có nó trong cơ sở R, và viết nó lên như một chức năng tiện lợi nhỏ. –

2

Luôn nghĩ rằng đây là một chút bụi, cũng không cần một gói bổ sung:

z <- c(a=1, b=2, c=3) 
# z 
# a b c 
# 1 2 3 
Các vấn đề liên quan