楼主: Aixir
2303 9

[实际应用] R语言,怎么把for循环的每一次结果提取其中一个参数,最后把所有参数放到一个矩阵里? [推广有奖]

  • 0关注
  • 0粉丝

大专生

83%

还不是VIP/贵宾

-

威望
0
论坛币
2959 个
通用积分
9.3581
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
265 点
帖子
24
精华
0
在线时间
96 小时
注册时间
2018-4-11
最后登录
2025-6-13

楼主
Aixir 发表于 2021-10-5 10:54:18 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
本人小白,没接触过编程,大佬们能讲的细一点么?这是我瞎写的代码,也能运行
A <-NULL###结果矩阵
for (i in 1:4263) {###循环4263次
        REI <- mydata[,c(1,24)]###从整个数据集中提取需要的两列
        REI <- REI[1:1000+i,]###分别取数据集(两列的那个)的前1001行、1002行...直至全部数据集(一共5263行)
        a <- fitgpd(REI$实体指数损失率...,threshold = 5)$pat###运行一个函数,分别取出里面的一个参数
        A <- rbind(A,a)###将每次的参数作为一条数据追加到结果矩阵中
}


但是出了一些问题,按理说A矩阵里的最后一个数不应该是全部数据集运行函数后的参数么?
A矩阵最后一个数是0.024,如下
结果矩阵
但我将全部数据运行后,得到的参数是0.0188,如下
全部数据运行函数结果
这是咋回事啊?我该咋整啊?感谢大佬们指点
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:for循环 R语言 For

实体总指数.xlsx
下载链接: https://bbs.pinggu.org/a-3548072.html

12.58 MB

全部数据集

实体总指数(损失率).xlsx

1.07 MB

全部数据

沙发
s609078902 发表于 2021-10-5 17:55:32
  1. A <- matrix(nrow = 4263, ncol = 2)
  2. for (i in 1:4263) {
  3.   REI <- mydata[1:1000+i, c(1, 24)]
  4.   A[i, ] <- fitgdp(REI, 5)$param
  5. }
复制代码
我用自己编的数据是没问题的,如何还不行,请把配图把问题描述清楚一些,并提供一些数据
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
Aixir 发表于 2021-10-5 19:37:17
s609078902 发表于 2021-10-5 17:55
我用自己编的数据是没问题的,如何还不行,请把配图把问题描述清楚一些,并提供一些数据
感谢大佬抽空解答,但是还是不行,数据集跟图上传了,您的方法也试了,也不是我想要的结果,甚至跟全部数据集运行函数后的param值对不上。这个函数在POT包里,要不麻烦您运行下?

板凳
s609078902 发表于 2021-10-6 10:04:05
Aixir 发表于 2021-10-5 19:37
感谢大佬抽空解答,但是还是不行,数据集跟图上传了,您的方法也试了,也不是我想要的结果,甚至跟全部数 ...
没看到有实体指数损失率这个变量呀

报纸
s609078902 发表于 2021-10-6 10:51:14
Aixir 发表于 2021-10-5 19:37
感谢大佬抽空解答,但是还是不行,数据集跟图上传了,您的方法也试了,也不是我想要的结果,甚至跟全部数 ...
  1. A <- matrix(nrow = 4263, ncol = 1)
  2. for (i in 1:4263) {
  3.   A[i,] <- fitgpd(data[1:(1000+i), 12], 5)$pat
  4. }
复制代码
1. 问题出在 1:1000+i 的运算优先级上,写成 1:(1000+i) 这样就没问题了;
2. 执行 for 循环之前应该提前留好足够的空间储存结果,像我这里这样,可以提高执行速度;
3. 你注释给得太多了,反而会影响阅读代码的速度;
4. 赋值 REI 的两行语句可以合并成一行,也能提高点运行速度。

地板
s609078902 发表于 2021-10-6 10:58:44
Aixir 发表于 2021-10-5 19:37
感谢大佬抽空解答,但是还是不行,数据集跟图上传了,您的方法也试了,也不是我想要的结果,甚至跟全部数 ...
  1. A <- matrix(nrow = 4263, ncol = 1)
  2. for (i in 1:4263) {
  3.   A[i,] <- fitgpd(data[1:(1000+i), 12], 1)$pat
  4. }
复制代码
1. 问题出在 1:1000+i 的运算优先级上,写成 1:(1000+i) 就没问题了;
2. 执行 for 循环之前应该预留足够的空间给结果, 像我这里这样,可以提高运行速度;
3. 你的注释太多了,会影响阅读代码的速度;
4. 复制 REI 的两行语句可以合并成一行,也可以提高运行速度。

7
s609078902 发表于 2021-10-6 10:59:40
Aixir 发表于 2021-10-5 19:37
感谢大佬抽空解答,但是还是不行,数据集跟图上传了,您的方法也试了,也不是我想要的结果,甚至跟全部数 ...
  1. A <- matrix(nrow = 4263, ncol = 1)
  2. for (i in 1:4263) {
  3.   A[i,] <- fitgpd(data[1:(1000+i), 12], 1)$pat
  4. }
复制代码
1. 问题出在 1:1000+i 的运算优先级上,写成 1:(1000+i) 就没问题了;
2. 执行 for 循环之前应该预留足够的空间给结果, 像我这里这样,可以提高运行速度;
3. 你的注释太多了,会影响阅读代码的速度;
4. 复制 REI 的两行语句可以合并成一行,也可以提高运行速度。

8
Aixir 发表于 2021-10-6 21:00:20
s609078902 发表于 2021-10-6 10:59
1. 问题出在 1:1000+i 的运算优先级上,写成 1:(1000+i) 就没问题了;
2. 执行 for 循环之前应该预留足够 ...
感谢大佬,今天太忙了,数据上传错了,不好意思,新数据已经上传了(错的那个数据我不知道咋撤回,就没撤),能在麻烦您抽空指点一下吗?万分感谢

9
Aixir 发表于 2021-10-6 21:06:26
s609078902 发表于 2021-10-6 10:59
1. 问题出在 1:1000+i 的运算优先级上,写成 1:(1000+i) 就没问题了;
2. 执行 for 循环之前应该预留足够 ...
感谢大神,已经试过了,数据对上了,万分感谢!

10
naodai0702 发表于 2021-10-20 03:46:58 来自手机
s609078902 发表于 2021-10-5 17:55
我用自己编的数据是没问题的,如何还不行,请把配图把问题描述清楚一些,并提供一些数据
您好 我是刚学习R语言的学生 请问可以咨询您一些R语言问题么 如果可以的话麻烦您联系我的邮箱1198993255@qq.com

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 22:15