2017-08-26 43 views
1

我有一個高維數組,並希望對它們應用一些函數。問題是我不能告訴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) 

如果我想使應用傳遞函數對象「myArray的」,我需要指定參數(「數據」)的位置。我試過但沒有結果:

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

在此先感謝!

回答

3

如果我理解你的權利,你需要指定非迭代參數。例如:

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)) 

可能會更好地工作。

+0

謝謝!我指定了每一個參數,除了我想要迭代並且工作得很好。輸出不尊重應用程序中的c(3,4)邊距,而是返回一個較低維數組,但由於我想要的數據在那裏,所以在array()格式化所有內容之後:) –

+0

我也嘗試過另一種有效的策略,但是風險很大:檢查函數(F2鍵),並創建一個克隆函數,將期望迭代參數放在首位。 –

+0

但是,如果您不想指定所有其他參數,則此替代方法(克隆函數之一)可能很有用 –

相關問題