Tôi có hai vectơKết hợp mỗi phần tử của một véc tơ với vector khác trong R
x <- c(2, 3, 4)
y <- rep(0, 5)
Tôi muốn để có được kết quả như sau:
> z
2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0
Làm thế nào tôi có thể tạo z
? Tôi đã cố gắng sử dụng paste
và c
nhưng không có gì có vẻ hiệu quả. Điều duy nhất tôi có thể nghĩ đến là sử dụng một for()
và nó là khủng khiếp chậm. Tôi đã googled này và tôi chắc chắn giải pháp là ra khỏi đó và tôi chỉ không đánh đúng từ khóa.
UPDATE: Đối với mục đích benchmarking:
Sử dụng giải pháp Nicola của:
> system.time(
+ precipitation <- `[<-`(numeric(length(x)*(length(y)+1)),seq(1,by=length(y)+1,length.out=length(x)),x)
+)
user system elapsed
0.419 0.407 0.827
Đây là ridiculously nhanh chóng! Tôi phải nói! Có ai đó giải thích điều này cho tôi biết không? My for()
mà tôi biết là luôn luôn sai trong R
sẽ phải mất ít nhất một ngày nếu nó thậm chí đã hoàn thành.
Những gợi ý khác:
> length(prate)
[1] 4914594
> length(empty)
[1] 207
> system.time(
+ precipitation <- unlist(sapply(prate, FUN = function(prate) c(prate,empty), simplify=FALSE))
+)
user system elapsed
16.470 3.859 28.904
tôi phải giết
len <- length(prate)
precip2 <- c(rbind(prate, matrix(rep(empty, len), ncol = len)))
Sau 15 phút.
Mặc dù không nhanh như @ Nicola của một tùy chọn khác là 'rep (x, each = length (y) +1) * c (1, y)' – akrun
Tôi đã chỉnh sửa để tăng tốc độ khi 'y' được tạo thành từ tất cả các số 0. – nicola