精華區beta R_Language 關於我們 聯絡資訊
[問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) 效能諮詢(我想讓R 跑更快) [軟體熟悉度]: 入門(對語法不熟悉) [問題敘述]: 保留物件結構,假設我有一個物件如下: obj_A <- list(matrix(NA,nrow = 2,2), matrix(NA,nrow = 3,2), matrix(NA,nrow = 2,1)); 假設我有一些數值,如下: num <- 1:12; 有甚麼辦法可以很快的 將 num 中的數字按照 R 內建排列矩陣的方式將值填入, 但又不破壞物件的結構。 我試過寫for迴圈來解決,但是當矩陣及數值是大量的時候會等很久, 例如每個矩陣都是5000*2000這種的QQ 想問有沒有類似"將值填入物件"的指令,讓coding可以更簡單快速。 [程式範例]: https://ideone.com/HPIsOg [環境敘述]: windows10 [關鍵字]: 慚愧不知道怎麼找相關資訊。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 119.14.95.65 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1505316955.A.D95.html
celestialgod: 直接array不行嗎 09/13 23:37
celestialgod: array(1:12, c(2,2,3)) 09/13 23:37
※ 編輯: wheado (119.14.95.65), 09/13/2017 23:43:38
celestialgod: 而且範例出來的結果跟你預期應該不一樣 09/13 23:39
wheado: 抱歉大大,更正一下,是list結構,因為 09/13 23:44
wheado: list中各個矩陣維度可能不一樣。 09/13 23:44
KKbiger: 如果是你修改前的就 obj_A[1:length(obj_A)]<-num 直接填 09/13 23:46
wheado: 如果是list結構,就不能用array方式填入值QQ 09/13 23:47
wheado: 結果希望可以是 unlist(res_A) == num 結果為TRUE。 09/13 23:48
> -------------------------------------------------------------------------- < 作者: celestialgod (天) 看板: R_Language 標題: Re: [問題] 保持物件結構,將值依照預設填入問題。 時間: Thu Sep 14 00:02:35 2017 ※ 引述《wheado (principal component QQ)》之銘言: : [問題類型]: : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : 效能諮詢(我想讓R 跑更快) : [軟體熟悉度]: : 入門(對語法不熟悉) : [問題敘述]: : 保留物件結構,假設我有一個物件如下: : obj_A <- list(matrix(NA,nrow = 2,2), : matrix(NA,nrow = 3,2), : matrix(NA,nrow = 2,1)); : 假設我有一些數值,如下: : num <- 1:12; : 有甚麼辦法可以很快的 : 將 num 中的數字按照 R 內建排列矩陣的方式將值填入, : 但又不破壞物件的結構。 : 我試過寫for迴圈來解決,但是當矩陣及數值是大量的時候會等很久, : 例如每個矩陣都是5000*2000這種的QQ : 想問有沒有類似"將值填入物件"的指令,讓coding可以更簡單快速。 : [程式範例]: : https://ideone.com/HPIsOg : [環境敘述]: : windows10 : [關鍵字]: : 慚愧不知道怎麼找相關資訊。 好讀板:https://pastebin.com/UpgqyUTK # 產生一百萬個常態變數值 num <- rnorm(1e6) # 建一個要輸出的matrix dimention的list struct <- list(c(500, 900), c(500, 100), c(250, 350), c(550, 750)) st <- proc.time() # 先把數字切成你要的length (#rows * #columns) out <- split(num, rep(seq_along(struct), sapply(struct, Reduce, f = `*`))) # 把每個list改成你要的dimension for (i in seq_along(struct)) dim(out[[i]]) <- struct[[i]] proc.time() - st # user system elapsed # 0.17 0.01 0.18 # 確認結果跟原PO想要的一樣 all(unlist(out) == num) # TRUE 一百萬個數值切成四個矩陣差不多0.2秒 一千萬個拆成十個,我猜大概也不過十秒以內的事情 這樣希望能夠解到原PO的問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.170.62.243 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1505318559.A.6AD.html
wheado: 跪著讀,謝謝大大分享。 09/14 00:05
只是好像matrix dimension可以用matrix存 第一個column存row size,第二個存column size 切長度那裏就用第一個column乘上第二個column就好 然後for就是一次取一個row 但這就給原PO自己改吧(攤手,我是覺得不影響拉 ※ 編輯: celestialgod (118.170.62.243), 09/14/2017 00:09:08
wheado: 似乎關鍵在split呀... 09/14 00:13
celestialgod: 對,用split切完幾乎就結束了 09/14 00:14