【问题标题】:How to make apply() pass the object in one of the arguments of the function (not the first)?如何使 apply() 在函数的一个参数(不是第一个)中传递对象?
【发布时间】:2018-02-04 11:30:46
【问题描述】:

我有一些高维数组,想对它们应用一些函数。问题是我不能告诉 apply()(或类似的 apply 系列)传递函数的对象不在函数的第一个参数中。

这里是愚蠢的例子:

data <- c(1,2,3,4,5)
myarray <- array(data,dim=c(5,5,2,2),dimnames=list(NULL,
paste("col",1:5,sep=""),
paste("matrix",1:2,sep=""),
paste("slice",1:2,sep="")))

现在,想象一个具有这种结构的函数:

function(arg1,arg2,arg3,data,arg4)

如果我想让 apply 将函数传递给对象“myarray”,我需要指定位于哪个参数(“data”)上。我试过了,但没有结果:

apply(myarray,c(3,4),function,arg1,arg2,arg3,arg4)

提前致谢!

【问题讨论】:

    标签: arrays r apply


    【解决方案1】:

    如果我理解您的权利,您需要指定非迭代参数。例如:

    func <- function(a,b,c){
        return(a*b + c)
    }
    
    apply(FUN=func,a=10,b=10,someObject)
    

    未指定的参数是使用指定向量迭代的参数。

    注意,如果你有一个一维结构

    unlist(lapply(FUN=func,a=10,b=10,someObject))
    

    可能会更好。

    【讨论】:

    • 谢谢!我指定了每个参数,除了我想要迭代的参数并且工作得几乎很好。输出不尊重应用中的 c(3,4) 边距,而是返回了一个低维数组,但由于我想要的数据在那里,在 array() 格式化后一切都井井有条:)
    • 我还尝试了另一种有效但风险极大的策略:检查函数(F2 键),然后创建一个克隆函数,将期望迭代的参数放在首位。
    • 但是,如果您不想指定所有其他参数,这种替代方法(克隆功能之一)可能会很有用
    猜你喜欢
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    相关资源
    最近更新 更多