[問題] 不使用迴圈的方法

看板R_Language作者 (固執又暴燥)時間7年前 (2017/04/08 10:36), 7年前編輯推噓0(0055)
留言55則, 3人參與, 最新討論串1/1
[問題類型]: 程式諮詢(我想用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

04/08 12:43, , 1F
lapply(input_nc$dim, function(x) x$vals)
04/08 12:43, 1F

04/08 22:25, , 2F
成功了 謝謝 可以問一下 function(x) x$vals <=這是自訂函數
04/08 22:25, 2F

04/08 22:26, , 3F
的簡易寫法嗎 怎沒 {} ? 另外 x$vals <=這是啥意思 不像索引
04/08 22:26, 3F

04/08 22:52, , 4F
x <- list(a = 1:10, beta = exp(-3:3))
04/08 22:52, 4F

04/08 22:52, , 5F
x是input_nc$dim之下的清單元素們,一次一個。
04/08 22:52, 5F

04/08 22:52, , 6F
lapply(x, mean)
04/08 22:52, 6F

04/08 22:53, , 7F
沒有大括號只是個簡寫,重點是回傳x$vals
04/08 22:53, 7F
BUQ: 我貼這兩行lapply 這種簡單範例 我懂...可是大大的組合技就.. andrew43: x <- list(1:10, exp(-3:3)) 04/08 22:57

04/08 22:58, , 8F
lapply(x, function(this.x) this.x[1]) # 猜猜結果是啥
04/08 22:58, 8F

04/08 23:16, , 9F
等同於這樣 lapply(x, function(x) x[1]) 吧
04/08 23:16, 9F

04/08 23:17, , 10F
this. <=不太懂實際作用
04/08 23:17, 10F

04/08 23:18, , 11F
this.只是你指定的一名字,不重要。
04/08 23:18, 11F

04/08 23:19, , 12F
故意和原變數x區隔而已。你的寫法正確但眼花時會誤會。
04/08 23:19, 12F

04/08 23:23, , 13F
我懂了 像這樣lapply(x, function(k) k[1])
04/08 23:23, 13F

04/08 23:23, , 14F
=========================================================
04/08 23:23, 14F

04/08 23:24, , 15F
回到原問題 有一部分理解了
04/08 23:24, 15F

04/08 23:24, , 16F
最後我用1樓大大的方法改成
04/08 23:24, 16F

04/08 23:24, , 17F
result<-lapply(input_nc$dim, function(x) x$vals)
04/08 23:24, 17F

04/08 23:25, , 18F
這行我懂 它傳回內部的$vals的值
04/08 23:25, 18F

04/08 23:26, , 19F
但為何 result原本是個空list
04/08 23:26, 19F

04/08 23:27, , 20F
最後result會被賦值給予 各個 子list的內容
04/08 23:27, 20F

04/08 23:28, , 21F
為何 子list 連名字都有了 傳回值有包含名字嗎
04/08 23:28, 21F

04/08 23:33, , 22F
這是lapply自動幫你建的。確實不用你去填。
04/08 23:33, 22F

04/08 23:33, , 23F
x <- list(a = 1:3, b = list(b1 = 4:6, b2 = 7:9))
04/08 23:33, 23F

04/08 23:33, , 24F
lapply(x$b, function(k) mean(k))
04/08 23:33, 24F

04/08 23:34, , 25F
結果可以看到b1和b2是自動填上去的。
04/08 23:34, 25F

04/08 23:55, , 26F
謝謝 大大.....受益良多...完全理解
04/08 23:55, 26F

04/09 00:02, , 27F
對了 請問使用 Rstudio 會不會遇到沒碼幾個字就跳出叫你存檔
04/09 00:02, 27F
http://i.imgur.com/iVOyy00.jpg
04/08 22:53 ※ 編輯: BUQ (111.248.84.82), 04/08/2017 22:54:47

04/08 22:57, , 28F
x <- list(1:10, exp(-3:3))
04/08 22:57, 28F

04/08 22:58, , 29F
lapply(x, function(this.x) this.x[1]) # 猜猜結果是啥
04/08 22:58, 29F

04/08 23:16, , 30F
等同於這樣 lapply(x, function(x) x[1]) 吧
04/08 23:16, 30F

04/08 23:17, , 31F
this. <=不太懂實際作用
04/08 23:17, 31F

04/08 23:18, , 32F
this.只是你指定的一名字,不重要。
04/08 23:18, 32F

04/08 23:19, , 33F
故意和原變數x區隔而已。你的寫法正確但眼花時會誤會。
04/08 23:19, 33F

04/08 23:23, , 34F
我懂了 像這樣lapply(x, function(k) k[1])
04/08 23:23, 34F

04/08 23:23, , 35F
=========================================================
04/08 23:23, 35F

04/08 23:24, , 36F
回到原問題 有一部分理解了
04/08 23:24, 36F

04/08 23:24, , 37F
最後我用1樓大大的方法改成
04/08 23:24, 37F

04/08 23:24, , 38F
result<-lapply(input_nc$dim, function(x) x$vals)
04/08 23:24, 38F

04/08 23:25, , 39F
這行我懂 它傳回內部的$vals的值
04/08 23:25, 39F

04/08 23:26, , 40F
但為何 result原本是個空list
04/08 23:26, 40F

04/08 23:27, , 41F
最後result會被賦值給予 各個 子list的內容
04/08 23:27, 41F

04/08 23:28, , 42F
為何 子list 連名字都有了 傳回值有包含名字嗎
04/08 23:28, 42F

04/08 23:33, , 43F
這是lapply自動幫你建的。確實不用你去填。
04/08 23:33, 43F

04/08 23:33, , 44F
x <- list(a = 1:3, b = list(b1 = 4:6, b2 = 7:9))
04/08 23:33, 44F

04/08 23:33, , 45F
lapply(x$b, function(k) mean(k))
04/08 23:33, 45F

04/08 23:34, , 46F
結果可以看到b1和b2是自動填上去的。
04/08 23:34, 46F

04/08 23:55, , 47F
謝謝 大大.....受益良多...完全理解
04/08 23:55, 47F

04/09 00:02, , 48F
對了 請問使用 Rstudio 會不會遇到沒碼幾個字就跳出叫你存檔
04/09 00:02, 48F
※ 編輯: 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

04/09 00:19, , 49F
感覺是你的rstudio有問題,但是錯誤訊息是亂碼...
04/09 00:19, 49F

04/09 00:19, , 50F
不知道你存檔路徑是不是有中文?
04/09 00:19, 50F

04/09 00:19, , 51F
如果是的話,請避免這點
04/09 00:19, 51F

04/09 00:22, , 52F
好的 我修正看看
04/09 00:22, 52F

04/09 00:30, , 53F
那個專案 路徑全部改成英文了....亂碼還是出現
04/09 00:30, 53F

04/09 11:19, , 54F
R3.3.3和Rstudio 全部重新安裝 還是出現亂碼....@@
04/09 11:19, 54F

04/11 11:07, , 55F
找到了 是library(ncdf4) 的問題 缷下就好了
04/11 11:07, 55F
文章代碼(AID): #1Ow4oei_ (R_Language)
文章代碼(AID): #1Ow4oei_ (R_Language)