2013-08-29 24 views
6

Khi tôi đọc R dẫn sử dụng, tôi đã gặp một số dòng mã như sau (sao chép từ R nhãn hiệu cho 'colSums'):ý nghĩa của những gì "x [] <- as.integer (x)"

x <- cbind(x1 = 3, x2 = c(4:1, 2:5)) 
dimnames(x)[[1]] <- letters[1:8] 
x[] <- as.integer(x) 

Ai đó có thể cho tôi biết mục đích của dòng cuối cùng là gì? Cảm ơn!

+2

Hãy so sánh kết quả của một phân bình thường so với một bài tập cho 'x []' như vì thế. So sánh: 'x [] <- as.integer (x); x; 'tới' x <- as.integer (x); x; ' – thelatemail

Trả lời

10

sự hiểu biết của tôi là gán cho x[] (hoặc gán cho một đối tượng với dấu ngoặc vuông, không có giá trị - cho những người tìm kiếm vấn đề này) ghi đè các giá trị trong x, trong khi vẫn giữ attributes rằng x có thể có, bao gồm cả kích thước ma trận . Trong trường hợp này, sẽ rất hữu ích khi nhớ rằng một ma trận là khá nhiều chỉ là một vectơ có kích thước được thêm vào.

Vì vậy, cho ...

x <- cbind(x1 = 3, x2 = c(4:1, 2:5)) 
dimnames(x)[[1]] <- letters[1:8] 

attributes(x) 
#$dim 
#[1] 8 2 
# 
#$dimnames 
#$dimnames[[1]] 
#[1] "a" "b" "c" "d" "e" "f" "g" "h" 
# 
#$dimnames[[2]] 
#[1] "x1" "x2" 

... điều này sẽ giữ cho kích thước và tên lưu trữ như các thuộc tính trong x

x[] <- as.integer(x) 

Trong khi điều này sẽ không ...

x <- as.integer(x) 

Cùng một logic cũng áp dụng cho các vectơ:

x <- 1:10 
attr(x,"blah") <- "some attribute" 

attributes(x) 
#$blah 
#[1] "some attribute" 

Vì vậy, điều này sẽ giúp tất cả các thuộc tính đáng yêu của bạn:

x[] <- 2:11 
x 
# [1] 2 3 4 5 6 7 8 9 10 11 
#attr(,"blah") 
#[1] "some attribute" 

Trong khi điều này sẽ không:

x <- 2:11 
x 
#[1] 2 3 4 5 6 7 8 9 10 11 
+1

vì' [<-' và '<-' là các hàm khác nhau ... – mnel

+0

OK. Cảm ơn nhiều. Bạn trả lời là chi tiết và hữu ích. –

+0

Mặc dù khi bạn có chuỗi, chúng không được chuyển đổi thành số nguyên. Tại sao? Ví dụ. x <- cbind (x1 = as.character (3), x2 = as.character (c (4: 1, 2: 5))); x [] <- is.integer (x) – vitor

1
x[] <- as.integer(x) 

Nó phân tích nội dung của matrix x thành số nguyên, sau đó lưu trữ lại thành x, làm ma trận.

x[,] <- as.integer(x) 

cũng hoạt động. Nhưng

x <- as.integer(x) 

sẽ mất cấu trúc ma trận.