Tôi muốn chèn một tập hợp các giá trị n được biểu diễn dưới dạng vec-tơ vào một tập hợp các vị trí tương ứng trong một ma trận. Ứng dụng thực tế liên quan đến việc chèn một tập hợp các giá trị nhiệt độ bề mặt biển vào một hình ảnh của một vùng được biểu diễn dưới dạng lưới với kích thước nrow x ncol> n trong đó tôi đã xác định được n pixel nước sẽ nhận được các giá trị nhiệt độ . Vấn đề tôi đã gặp phải là các giá trị nhiệt độ được sắp xếp như thể chúng là từ một ma trận cột lớn hơn là thứ tự hàng lớn được sử dụng để lập chỉ mục lưới R.Làm cách nào để chèn các giá trị từ một véc-tơ vào ma trận bằng cách sử dụng thứ tự cột lớn?
Đây là ví dụ về đồ chơi theo ý tôi.
> grid <- matrix(0,4,4)
> grid # define the base grid
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
[3,] 0 0 0 0
[4,] 0 0 0 0
> temps <- c(9,9,9,9,9) # we have 5 temperature values
> locs <- c(2,3,4,6,7) # locations in the base grid that are water
> grid[locs] <- temps # not really what I want - substitution in row-major order
> grid
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 9 9 0 0
[3,] 9 9 0 0
[4,] 9 0 0 0
Kết quả mong muốn sẽ thay:
[,1] [,2] [,3] [,4]
[1,] 0 9 9 9
[2,] 0 9 9 0
[3,] 0 0 0 0
[4,] 0 0 0 0
Tôi cho rằng tôi có thể chơi với transposing lưới điện, làm thay và sau đó transposing nó trở lại, nhưng tôi nghĩ rằng sẽ có một tốt hơn cách tiếp cận vấn đề này.
Tôi khá chắc chắn lựa chọn thứ hai của bạn chỉ hoạt động cho ma trận vuông (vì nó giống như tôi xuống dưới đây:)) ... Ví dụ cho một ma trận 4 bởi 5, 2 nên đi đến 6, nhưng với hàm trên, ' f (2, c (4,5)) == 5'. – jed
@jed - Không, không đúng. Với ma trận 4x5, 2 * nên * ánh xạ tới 5. (Nó đếm ngược thông qua bốn phần tử trong cột đầu tiên, và sau đó quay trở lại ở đầu cột thứ hai khi nó đạt đến phần tử thứ năm). Hãy thử nó ra chính mình để thấy rằng điều này là chính xác, với 'lưới <- ma trận (0, nr = 4, nc = 5); lưới [f (2, mờ (lưới))] <- 99; lưới'. Ngoài ra, xin lỗi tôi đã không nhìn thấy và chỉ cần chỉnh sửa câu trả lời của bạn khi tôi trở lại đây để thêm của riêng tôi khá tương tự 'f' - Tôi đã +1 của bạn khi tôi nhận thấy nó một vài giờ trước! –
Ah đúng, tôi đã đi sai đường. Như trong 6 nên đi đến 2, mà không xảy ra trong chức năng của bạn! – jed