楼主: silverstory
4752 7

[问答] 大神请进,为啥for循环总是得到最后一个值? [推广有奖]

  • 0关注
  • 0粉丝

已卖:2份资源

初中生

52%

还不是VIP/贵宾

-

威望
0
论坛币
110 个
通用积分
0
学术水平
0 点
热心指数
5 点
信用等级
0 点
经验
808 点
帖子
8
精华
0
在线时间
22 小时
注册时间
2009-2-28
最后登录
2021-5-14

楼主
silverstory 发表于 2017-7-10 21:44:31 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
R语言新新手,超级简单的程序都不知道哪错了。一片茫然,请大神帮我看看这个程序。 我是做的R语言初学者指南的第7章习题2。 我期望得到的D1是16个数值。可是结果只有i=8的结果  卡了一天 烦透了  复制黏贴的程序不对了,做成图片放在了附件里  

> for(i in 1:8)
+ VEG.imean<- mean(VEG.i$R,na.rm = TRUE)
> for(i in 1:8)
+ {VEG.i<- VEG[VEG$Transect==i,]
+ VEG.imean<- mean(VEG.i$R,na.rm = TRUE)
+ VEG.isd<- sd(x = VEG.i$R,na.rm = TRUE)
+ D1<- cbind(VEG.imean, VEG.isd)
+ }
二维码

扫码加我 拉你入群

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

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

关键词:for循环 最后一个 For R语言初学者 R语言

1.png (3.94 KB)

1.png

沙发
丘延君 发表于 2017-7-10 21:52:59 来自手机
silverstory 发表于 2017-7-10 21:44
R语言新新手,超级简单的程序都不知道哪错了。一片茫然,请大神帮我看看这个程序。 我是做的R语言初学者指南 ...
你要在循环外先指定D1<-NULL
然后在循环內改成D1<-cbind(D1,,)
已有 1 人评分论坛币 收起 理由
jiangbeilu + 5 精彩帖子

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

藤椅
丘延君 发表于 2017-7-10 21:57:02 来自手机
silverstory 发表于 2017-7-10 21:44
R语言新新手,超级简单的程序都不知道哪错了。一片茫然,请大神帮我看看这个程序。 我是做的R语言初学者指南 ...
如图

板凳
丘延君 发表于 2017-7-10 21:57:46 来自手机
丘延君 发表于 2017-7-10 21:57
如图
好像回复出了点问题

报纸
crystal8832 学生认证  发表于 2017-7-10 23:11:17
  1. VEG.mean = c()
  2. VEG.sd = c()
  3. for (i in 1:8) {
  4. VEG.i = VEG[VEG$Transect==i,]
  5. VEG.imean = mean(VEG.i$R, na.rm = TRUE)
  6. VEG.mean = cbind(VEG.mean, VGE.imean)
  7. VEG.isd = sd(x = VEG.i$R, na.rm = TRUE)
  8. VEG.sd = cbind(VEG.sd, VEG.isd)
  9. D1 = cbind(as.numeric(VEG.mean), as.numeric(VEG.sd))
  10. colnames(D1) = c("Mean", "Sd")
  11. return(D1)
  12. }
复制代码

地板
silverstory 发表于 2017-7-11 00:25:23
crystal8832 发表于 2017-7-10 23:11
非常感谢,我大概理解了

7
silverstory 发表于 2017-7-11 00:26:53
丘延君 发表于 2017-7-10 21:52
你要在循环外先指定D1
非常感谢

8
赵安豆 发表于 2024-8-24 17:33:59
在你的描述中提到的问题通常是由于在循环内修改了一个向量或列表并期望每次迭代都保留结果,但实际上只保存了最后一次迭代的结果。为了解决这个问题,你需要预先定义一个可以存储所有结果的向量或数据框。

根据你提供的信息(虽然代码片段不完整),我推测你的意图是想要在每一次`for`循环中计算某些值,并将这些值保存到某个变量`D1`中。但是如果你直接在一个已经存在的向量上进行修改,如:

```r
D1 <- numeric() # 或者 D1 <- c()
for(i in 1:8){
  VEG.i <- ... # 这里应该是你的计算过程
  D1[i] <- VEG.i
}
```

这样可能会导致在R环境中`D1`只包含最后一次迭代的值。这是因为你没有事先定义一个足够大的向量来存储所有可能的结果。

正确的做法是在循环开始之前,先定义好可以存放结果的变量:

```r
# 假设你想保存每个i对应的VEG.i到D1中
D1 <- numeric(8) # 或者用 D1 <- vector("numeric", 8)

for(i in 1:8){
  VEG.i <- ... # 这里是你的计算部分,比如:mean(VEG[, i])
  D1[i] <- VEG.i
}

# 现在D1包含了所有i对应的值
```

或者使用`data.frame`来存储更多维度的信息:

```r
results <- data.frame(i=integer(), VEG_i=numeric())

for(i in 1:8){
  VEG.i <- ... # 这里是你的计算过程
  results[i,] <- c(i,VEG.i) # 将结果保存到data.frame中
}

# 现在results包含了所有i和对应的VEG.i值
```

这样,每次循环结束后`D1`或`results`都会包含全部的迭代结果。希望这能帮助你解决问题!

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



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

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