如何无需for循环将数组变量作为迭代输入传入R函数
使用apply系列函数替代循环实现列迭代传入R函数
你可以用apply函数替代for循环,实现更简洁高效的列迭代处理,代码如下:
# 用apply按列处理矩阵A,每一列作为参数传入Func Out_apply <- apply(A, MARGIN = 2, function(col) { do.call(Func, args = as.list(col)) })
代码说明
apply(A, MARGIN = 2, ...):MARGIN=2指定按列处理矩阵,每一列会被作为参数传递给后续的匿名函数- 匿名函数中的
as.list(col):将当前列的向量转换为参数列表,配合do.call就能把列中每个元素作为独立参数传入Func - 执行后
Out_apply会直接生成结果向量,无需手动初始化拼接,避免了循环中向量频繁扩容的性能损耗
验证结果一致性
用以下代码确认结果和原循环、colSums的输出一致:
all.equal(Out, Out_apply) # 返回TRUE all.equal(Out_apply, colSums(A)) # 返回TRUE
额外优化(可选)
如果可以修改Func使其接受向量参数,还能进一步简化代码:
# 修改Func为接受向量参数的版本 Func_vec <- function(x) sum(x) # 直接用apply调用简化后的函数 Out_vec <- apply(A, 2, Func_vec)
内容的提问来源于stack exchange,提问作者Dylan_Gomes
相关产品推荐
相关产品推荐

