You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R循环中向向量追加结果不覆盖的方法?帕斯卡三角实现求助

解决你的R语言帕斯卡三角问题

嘿,刚上手R的话遇到这种小bug很正常,我帮你捋清楚问题出在哪,再给你修正方案~

问题根源

你代码里的核心问题是没有正确累积计算结果:

  • 你初始化了M <- c(),但在循环里从来没更新过它!每次执行list_results <- append(result,M)时,M始终是空向量,所以list_results每次都只有当前的result值。
  • 循环结束后,list_results就只剩最后一次循环的结果choose(10,10)=1,当你把这个单元素向量转成11×11矩阵时,R会自动重复填充这个值,所以得到全1的矩阵。

修正后的代码

只需要把结果正确追加到M中,最后再转成矩阵(注意加上byrow=TRUE让结果按行排列,符合帕斯卡三角的行逻辑):

M <- c()
for (n in 0:10) {
  for (k in 0:10) {
    result <- choose(n, k)
    M <- append(M, result)  # 关键:把新结果追加到M,更新M
  }
}
Pascal <- matrix(M, ncol=11, byrow=TRUE)

运行后你会看到正确的11×11帕斯卡三角矩阵,比如第一行是1 0 0 ... 0,第二行是1 1 0 ... 0,以此类推。

关于append/rbind/paste的区别

给你明确区分这三个工具的用途,以后就不会搞混啦:

  • append():这是你这次需要的工具,专门用来给一维向量添加元素,适合像这样先累积所有结果到向量,再转成矩阵的场景。
  • rbind():用来给矩阵或数据框添加行,如果你一开始就用矩阵存储,每次循环生成一行数据再追加,就可以用它,但这次用向量累积更简单。
  • paste():完全是用来拼接字符串的,和数值计算、向量累积没关系,千万别在这种场景用~

更简洁的写法(可选)

其实R里可以不用嵌套循环,用outer()函数一行搞定,效率更高:

Pascal <- outer(0:10, 0:10, function(n, k) choose(n, k))

这个函数会自动遍历所有n和k的组合,计算对应的组合数,直接生成目标矩阵。

内容的提问来源于stack exchange,提问作者XY user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:24:39