看板 R_Language 關於我們 聯絡資訊
[問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 請把以下不需要的部份刪除 一個月新手(沒寫過程式,R 是我的第一次) [問題敘述]: 我想要不使用for 以向量來改寫 [程式範例]: 背景 library(ncdf4) input_nc <- nc_open("C:/buq/sechiba_history_sample.nc") #data是一個list,內含的list又包了小list,包很多層 result<- list() #做一個空的list for (i in 1:input_nc$ndims ) { result[[input_nc$dim[[i]]$name]] <- input_nc$dim[[i]]$vals # 同時建立內部的子list的名字和值 <- input_nc$dim$y$vals } 以上是別人的成功寫法 ================================================ 以下 我想要不使用for 以向量來改寫 i<- (1:input_nc$ndims) result[[input_nc$dim[[i]]$name]] <- input_nc$dim[[i]]$vals 錯誤碼如下 Error in input_nc$dim[[i]] : recursive indexing failed at level 3 [環境敘述]: R version 3.3.3 (2017-03-06) [關鍵字]: 批次 賦值 for -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.91.216 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1491618984.A.B3F.html ※ 編輯: BUQ (111.248.91.216), 04/08/2017 10:37:13
celestialgod: lapply(input_nc$dim, function(x) x$vals) 04/08 12:43
BUQ: 成功了 謝謝 可以問一下 function(x) x$vals <=這是自訂函數 04/08 22:25
BUQ: 的簡易寫法嗎 怎沒 {} ? 另外 x$vals <=這是啥意思 不像索引 04/08 22:26
BUQ: x <- list(a = 1:10, beta = exp(-3:3)) 04/08 22:52
andrew43: x是input_nc$dim之下的清單元素們,一次一個。 04/08 22:52
BUQ: lapply(x, mean) 04/08 22:52
andrew43: 沒有大括號只是個簡寫,重點是回傳x$vals 04/08 22:53
BUQ: 我貼這兩行lapply 這種簡單範例 我懂...可是大大的組合技就.. andrew43: x <- list(1:10, exp(-3:3)) 04/08 22:57
andrew43: lapply(x, function(this.x) this.x[1]) # 猜猜結果是啥04/08 22:58
BUQ: 等同於這樣 lapply(x, function(x) x[1]) 吧04/08 23:16
BUQ: this. <=不太懂實際作用04/08 23:17
andrew43: this.只是你指定的一名字,不重要。04/08 23:18
andrew43: 故意和原變數x區隔而已。你的寫法正確但眼花時會誤會。04/08 23:19
BUQ: 我懂了 像這樣lapply(x, function(k) k[1])04/08 23:23
BUQ: =========================================================04/08 23:23
BUQ: 回到原問題 有一部分理解了04/08 23:24
BUQ: 最後我用1樓大大的方法改成04/08 23:24
BUQ: result<-lapply(input_nc$dim, function(x) x$vals)04/08 23:24
BUQ: 這行我懂 它傳回內部的$vals的值04/08 23:25
BUQ: 但為何 result原本是個空list04/08 23:26
BUQ: 最後result會被賦值給予 各個 子list的內容04/08 23:27
BUQ: 為何 子list 連名字都有了 傳回值有包含名字嗎04/08 23:28
andrew43: 這是lapply自動幫你建的。確實不用你去填。04/08 23:33
andrew43: x <- list(a = 1:3, b = list(b1 = 4:6, b2 = 7:9))04/08 23:33
andrew43: lapply(x$b, function(k) mean(k))04/08 23:33
andrew43: 結果可以看到b1和b2是自動填上去的。04/08 23:34
BUQ: 謝謝 大大.....受益良多...完全理解04/08 23:55
BUQ: 對了 請問使用 Rstudio 會不會遇到沒碼幾個字就跳出叫你存檔04/09 00:02
http://i.imgur.com/iVOyy00.jpg 04/08 22:53 ※ 編輯: BUQ (111.248.84.82), 04/08/2017 22:54:47
andrew43: x <- list(1:10, exp(-3:3)) 04/08 22:57
andrew43: lapply(x, function(this.x) this.x[1]) # 猜猜結果是啥 04/08 22:58
BUQ: 等同於這樣 lapply(x, function(x) x[1]) 吧 04/08 23:16
BUQ: this. <=不太懂實際作用 04/08 23:17
andrew43: this.只是你指定的一名字,不重要。 04/08 23:18
andrew43: 故意和原變數x區隔而已。你的寫法正確但眼花時會誤會。 04/08 23:19
BUQ: 我懂了 像這樣lapply(x, function(k) k[1]) 04/08 23:23
BUQ: ========================================================= 04/08 23:23
BUQ: 回到原問題 有一部分理解了 04/08 23:24
BUQ: 最後我用1樓大大的方法改成 04/08 23:24
BUQ: result<-lapply(input_nc$dim, function(x) x$vals) 04/08 23:24
BUQ: 這行我懂 它傳回內部的$vals的值 04/08 23:25
BUQ: 但為何 result原本是個空list 04/08 23:26
BUQ: 最後result會被賦值給予 各個 子list的內容 04/08 23:27
BUQ: 為何 子list 連名字都有了 傳回值有包含名字嗎 04/08 23:28
andrew43: 這是lapply自動幫你建的。確實不用你去填。 04/08 23:33
andrew43: x <- list(a = 1:3, b = list(b1 = 4:6, b2 = 7:9)) 04/08 23:33
andrew43: lapply(x$b, function(k) mean(k)) 04/08 23:33
andrew43: 結果可以看到b1和b2是自動填上去的。 04/08 23:34
BUQ: 謝謝 大大.....受益良多...完全理解04/08 23:55
BUQ: 對了 請問使用 Rstudio 會不會遇到沒碼幾個字就跳出叫你存檔04/09 00:02
※ 編輯: BUQ (175.96.65.181), 04/09/2017 00:03:55 http://i.imgur.com/MDyCkdm.jpg ※ 編輯: BUQ (175.96.65.181), 04/09/2017 00:05:45
celestialgod: 感覺是你的rstudio有問題,但是錯誤訊息是亂碼... 04/09 00:19
celestialgod: 不知道你存檔路徑是不是有中文? 04/09 00:19
celestialgod: 如果是的話,請避免這點 04/09 00:19
BUQ: 好的 我修正看看 04/09 00:22
BUQ: 那個專案 路徑全部改成英文了....亂碼還是出現 04/09 00:30
BUQ: R3.3.3和Rstudio 全部重新安裝 還是出現亂碼....@@ 04/09 11:19
BUQ: 找到了 是library(ncdf4) 的問題 缷下就好了 04/11 11:07