2013-03-13 22 views
1

我正在通過使用以下代碼創建一個代表[0,1]^d的d維超立方體,該代碼由此論壇上的其他用戶友好建議。大概是「應用」功能相關的

## generation of the d-dimensional hypercube 
cube <- do.call(expand.grid,replicate(d, seq_len(mesh)/mesh, simplify=FALSE)) 

比方說,我有一個函數,說

foo <- function(u) prod(u) 

,我會想申請上面創建的hybercube的每一個點。有沒有一種很好的方法來避免在d行中使用循環來實現?我嘗試過使用各種應用功能,但那是不成功的。

謝謝。

+3

這沒有任何意義。超立方體中的每個點都是長度爲1的不是?那麼,什麼是'u' - 我懷疑這個超立方體的切片。如何一個小的,可重複的例子說明你的問題? – 2013-03-13 22:05:25

+0

否@Gavin,超立方體的每個點(精確的「頂點」)是R^d中的一個點,即長度爲「d」的座標向量。 – flodel 2013-03-14 02:03:43

回答

0

首先,給您上頂點的座標功能:

hypercube <- function(d, coord = c(0, 1)) 
    do.call(expand.grid, replicate(d, coord, simplify = FALSE)) 

例如,使用d = 3

cube <- hypercube(d = 3) 
cube 
# Var1 Var2 Var3 
# 1 0 0 0 
# 2 1 0 0 
# 3 0 1 0 
# 4 1 1 0 
# 5 0 0 1 
# 6 1 0 1 
# 7 0 1 1 
# 8 1 1 1 

然後,對每個頂點運行foo功能超立方體,使用apply

apply(cube, 1, foo) 
+0

非常感謝!這只是通過一個巨大的因素優化了我的代碼的運行時間。乾杯 – user2152112 2013-03-14 08:15:53