R语言自定义函数返回多个NA值,求排查与修复方法
问题排查与修复方案
问题根源
你的循环只执行了k=5这一次迭代,因为for (k in q)中的q是单个数值5,不是一个序列。这就导致XX_t只有第5个位置被赋值,其余位置未初始化,自然返回NA。
修复方案1:修正循环逻辑
先初始化一个与输入向量长度一致的空向量,再遍历所有索引:
q = 5 B_theta = 7.32 B_B = c(1,2,3,4,5,6,7,8,9,10) Z_t = c(1,2,3,4,5,6,7,8,9,10) x_t = function (B_theta,B_B,Z_t){ # 初始化与输入向量长度一致的数值向量,避免动态扩容 XX_t = numeric(length(B_B)) # 遍历所有索引,从1到向量长度 for (k in 1:length(B_B)){ XX_t[k] = B_theta*B_B[k]*Z_t[k] } return(XX_t) } big_I = x_t(B_theta,B_B,Z_t) big_I
修复方案2:使用R向量化操作(推荐)
R原生支持向量元素级运算,完全不需要循环,代码更简洁高效:
q = 5 B_theta = 7.32 B_B = c(1,2,3,4,5,6,7,8,9,10) Z_t = c(1,2,3,4,5,6,7,8,9,10) # 直接元素级相乘,一步得到结果 big_I = B_theta * B_B * Z_t big_I
两种方案都会返回完整的计算结果:7.32 29.28 65.88 117.12 183 262.32 356.28 464.88 588.12 726
内容的提问来源于stack exchange,提问作者Madison Ell
相关产品推荐
相关产品推荐

