R语言:如何在循环迭代中累加数值而非覆盖原有内容
解决你的R代码数据追加问题
我懂你的需求啦——每次外层循环生成的3个随机数要追加到cv里,而不是直接覆盖掉之前的内容。原来的代码里每次外层循环都会把cv重新赋值为当前的value,所以之前的数据直接就丢了。这里给你几个简单好用的解决方案:
方法一:初始化空向量,用c()拼接追加
这是最直观的方式,先把cv初始化为空向量,每次生成完新的随机数后,用c(cv, value)把新值拼接到原有内容的末尾:
# 初始化空向量,用来存储所有随机数 cv <- c() for(n in 1:2){ value <- c() # 把value设为向量,替代原来的列表操作(没必要用列表) for(i in 1:3){ value[i] <- runif(1, 5.0, 20) } # 关键:用拼接替代直接赋值,保留原有数据 cv <- c(cv, value) } print(cv)
方法二:用append()函数,语义更清晰
append()是R里专门用来在向量末尾添加元素的函数,用法和c()类似,但读起来更明确:
cv <- c() for(n in 1:2){ value <- c() for(i in 1:3){ value[i] <- runif(1, 5.0, 20) } cv <- append(cv, value) } print(cv)
额外优化:省去内层循环,代码更简洁
其实完全不用写内层循环,runif()可以直接生成指定数量的随机数,一步到位:
cv <- c() for(n in 1:2){ # 直接生成3个符合要求的随机数,省去内层循环 value <- runif(3, 5.0, 20) cv <- c(cv, value) } print(cv)
小补充:原来的代码问题出在哪?
你之前的代码里,每次外层循环都执行cv=value,这相当于把cv完全替换成当前循环的value,之前的数值自然就被覆盖了。而用c(cv, value)或者append()是把新的value拼接到cv的末尾,就能保留住之前的数据啦。另外,原来用value[[i]]是把value当列表用,但你只是需要存储数值向量,用value[i]就足够了,列表在这里有点多余哦~
内容的提问来源于stack exchange,提问作者Ville
相关产品推荐
相关产品推荐

