作者BUQ (固執又暴燥)
看板R_Language
標題[問題] 不使用迴圈的方法
時間Sat Apr 8 10:36:21 2017
[問題類型]:
程式諮詢(我想用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://webptt.com/m.aspx?n=bbs/R_Language/M.1491618984.A.B3F.html
※ 編輯: BUQ (111.248.91.216), 04/08/2017 10:37:13
1F:→ celestialgod: lapply(input_nc$dim, function(x) x$vals) 04/08 12:43
2F:→ BUQ: 成功了 謝謝 可以問一下 function(x) x$vals <=這是自訂函數 04/08 22:25
3F:→ BUQ: 的簡易寫法嗎 怎沒 {} ? 另外 x$vals <=這是啥意思 不像索引 04/08 22:26
4F:→ BUQ: x <- list(a = 1:10, beta = exp(-3:3)) 04/08 22:52
5F:→ andrew43: x是input_nc$dim之下的清單元素們,一次一個。 04/08 22:52
6F:→ BUQ: lapply(x, mean) 04/08 22:52
7F:→ andrew43: 沒有大括號只是個簡寫,重點是回傳x$vals 04/08 22:53
→ BUQ: 我貼這兩行lapply 這種簡單範例 我懂...可是大大的組合技就.. → andrew43: x <- list(1:10, exp(-3:3)) 04/08 22:57
8F:→ andrew43: lapply(x, function(this.x) this.x[1]) # 猜猜結果是啥04/08 22:58
9F:→ BUQ: 等同於這樣 lapply(x, function(x) x[1]) 吧04/08 23:16
10F:→ BUQ: this. <=不太懂實際作用04/08 23:17
11F:→ andrew43: this.只是你指定的一名字,不重要。04/08 23:18
12F:→ andrew43: 故意和原變數x區隔而已。你的寫法正確但眼花時會誤會。04/08 23:19
13F:→ BUQ: 我懂了 像這樣lapply(x, function(k) k[1])04/08 23:23
14F:→ BUQ: =========================================================04/08 23:23
15F:→ BUQ: 回到原問題 有一部分理解了04/08 23:24
16F:→ BUQ: 最後我用1樓大大的方法改成04/08 23:24
17F:→ BUQ: result<-lapply(input_nc$dim, function(x) x$vals)04/08 23:24
18F:→ BUQ: 這行我懂 它傳回內部的$vals的值04/08 23:25
19F:→ BUQ: 但為何 result原本是個空list04/08 23:26
20F:→ BUQ: 最後result會被賦值給予 各個 子list的內容04/08 23:27
21F:→ BUQ: 為何 子list 連名字都有了 傳回值有包含名字嗎04/08 23:28
22F:→ andrew43: 這是lapply自動幫你建的。確實不用你去填。04/08 23:33
23F:→ andrew43: x <- list(a = 1:3, b = list(b1 = 4:6, b2 = 7:9))04/08 23:33
24F:→ andrew43: lapply(x$b, function(k) mean(k))04/08 23:33
25F:→ andrew43: 結果可以看到b1和b2是自動填上去的。04/08 23:34
26F:→ BUQ: 謝謝 大大.....受益良多...完全理解04/08 23:55
27F:→ 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
28F:→ andrew43: x <- list(1:10, exp(-3:3)) 04/08 22:57
29F:→ andrew43: lapply(x, function(this.x) this.x[1]) # 猜猜結果是啥 04/08 22:58
30F:→ BUQ: 等同於這樣 lapply(x, function(x) x[1]) 吧 04/08 23:16
31F:→ BUQ: this. <=不太懂實際作用 04/08 23:17
32F:→ andrew43: this.只是你指定的一名字,不重要。 04/08 23:18
33F:→ andrew43: 故意和原變數x區隔而已。你的寫法正確但眼花時會誤會。 04/08 23:19
34F:→ BUQ: 我懂了 像這樣lapply(x, function(k) k[1]) 04/08 23:23
35F:→ BUQ: ========================================================= 04/08 23:23
36F:→ BUQ: 回到原問題 有一部分理解了 04/08 23:24
37F:→ BUQ: 最後我用1樓大大的方法改成 04/08 23:24
38F:→ BUQ: result<-lapply(input_nc$dim, function(x) x$vals) 04/08 23:24
39F:→ BUQ: 這行我懂 它傳回內部的$vals的值 04/08 23:25
40F:→ BUQ: 但為何 result原本是個空list 04/08 23:26
41F:→ BUQ: 最後result會被賦值給予 各個 子list的內容 04/08 23:27
42F:→ BUQ: 為何 子list 連名字都有了 傳回值有包含名字嗎 04/08 23:28
43F:→ andrew43: 這是lapply自動幫你建的。確實不用你去填。 04/08 23:33
44F:→ andrew43: x <- list(a = 1:3, b = list(b1 = 4:6, b2 = 7:9)) 04/08 23:33
45F:→ andrew43: lapply(x$b, function(k) mean(k)) 04/08 23:33
46F:→ andrew43: 結果可以看到b1和b2是自動填上去的。 04/08 23:34
47F:→ BUQ: 謝謝 大大.....受益良多...完全理解04/08 23:55
48F:→ 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
49F:→ celestialgod: 感覺是你的rstudio有問題,但是錯誤訊息是亂碼... 04/09 00:19
50F:→ celestialgod: 不知道你存檔路徑是不是有中文? 04/09 00:19
51F:→ celestialgod: 如果是的話,請避免這點 04/09 00:19
52F:→ BUQ: 好的 我修正看看 04/09 00:22
53F:→ BUQ: 那個專案 路徑全部改成英文了....亂碼還是出現 04/09 00:30
54F:→ BUQ: R3.3.3和Rstudio 全部重新安裝 還是出現亂碼....@@ 04/09 11:19
55F:→ BUQ: 找到了 是library(ncdf4) 的問題 缷下就好了 04/11 11:07