作者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/cn.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