R语言中如何向函数传递多个参数并返回等长输出向量
问题原因
你定义的f函数传入向量仅返回单个值,核心是sum()函数的行为导致的:当输入长度为n的lambda向量时,lambda*(x-mu)会自动广播生成矩阵,sum()会直接对矩阵所有元素求和,最终只输出1个数值,和lambda长度不匹配,因此绘图时报x和y长度不一致的错误。
解决方法
以下是三种常用实现方案,按需选择即可:
- 方案1:用
Vectorize包装原函数(改动最小)
无需修改原有函数逻辑,直接用内置函数包装后即可支持向量输入:
# 包装原函数得到支持向量输入的新函数 f_vec <- Vectorize(f) # 传入lambda向量直接得到对应长度的输出 output <- f_vec(lambda) # 正常绘图 plot(lambda, output)
- 方案2:用
sapply遍历参数调用
不需要调整函数定义,直接遍历lambda的每个元素传入f,自动汇总结果为向量:
output <- sapply(lambda, f) plot(lambda, output)
- 方案3:改写原函数原生支持向量输入
如果有高频调用需求,可直接改写函数逻辑,避免额外包装开销:
f <- function(lambda) { sapply(lambda, function(l) sum((x-mu)/(1 + l*(x-mu)))) } # 直接调用即可得到对应长度的输出 output <- f(lambda) plot(lambda, output)
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

