如何生成函数入参?实现将矩阵各列传入expand.grid的调用需求
解决方法
直接用R内置的do.call函数就能搞定,它可以把列表里的元素逐个作为参数传给目标函数,完全不用手动逐列填参数。
核心逻辑
expand.grid支持接收任意多个向量参数,而do.call的作用就是把一个列表里的所有元素,按顺序作为参数传给你要调用的函数,你只需要先把矩阵p的每一列转成列表的独立元素就行。
具体代码
# 先构造一个示例测试矩阵,你可以替换成自己的p矩阵 p <- matrix(c(1:2, 3:4, 5:6), ncol = 3) # 一行代码实现调用,和手动写expand.grid(p[,1],p[,2],p[,3])效果完全一样 res <- do.call(expand.grid, as.data.frame(p))
说明
as.data.frame(p)会自动把矩阵的每一列转为列表的单个元素,刚好匹配do.call的参数要求,不用额外做格式转换- 不管你的矩阵p有多少列,这个写法都通用,不需要改参数
- 如果你要保留矩阵原来的列名作为结果的变量名,给矩阵p设置列名就行,结果会自动继承
内容的提问来源于stack exchange,提问作者di bao
相关产品推荐
相关产品推荐

