f(x,y)
私はRで、単一のエントリに対してのみ明確に定義された2変数の整数値関数を構築しました(例ではありませんf(1,1:5)
)。F(x,y,z,w)
出力を与える整数値関数を効果的に探しています。
f(x,y),f(x,y+1),...,f(x,w),f(x+1,y),f(x+1,y+1),...,f(x+1,w),...,f(z,y),f(z,y+1),...,f(z,w)
(z-x+1) by (w-y+1)
マトリックスとして。どんな助けにも乾杯!
f(x,y)
私はRで、単一のエントリに対してのみ明確に定義された2変数の整数値関数を構築しました(例ではありませんf(1,1:5)
)。F(x,y,z,w)
出力を与える整数値関数を効果的に探しています。
f(x,y),f(x,y+1),...,f(x,w),f(x+1,y),f(x+1,y+1),...,f(x+1,w),...,f(z,y),f(z,y+1),...,f(z,w)
(z-x+1) by (w-y+1)
マトリックスとして。どんな助けにも乾杯!
outer
ここで探しているもののようです。
# make a simple function
f <- function(x, y){x+y}
x <- 3
z <- 5
y <- 2
w <- 7
outer(x:z, y:w, f)
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 5 6 7 8 9 10
#[2,] 6 7 8 9 10 11
#[3,] 7 8 9 10 11 12
関数が実際に入力としてスカラーのみを受け取ることができるのが本当である場合、Vectorize
このアプローチを機能させるために を使用する必要があるかもしれません
# Function that can only takes scalars...
f <- function(x, y){if(length(x) > 1 | length(y) > 1) stop('blah'); x + y}
outer(x:z, y:w, f)
#Error in FUN(X, Y, ...) : blah
myvectorizedfun <- Vectorize(f)
outer(x:z, y:w, myvectorizedfun)
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 5 6 7 8 9 10
#[2,] 6 7 8 9 10 11
#[3,] 7 8 9 10 11 12
for
このような行列の作成を処理するには、ループが最も簡単な方法であることがわかりました。これは、あなたがやろうとしていることの基本的な概要です:
F <- function(x,y,z,w) {
Matrix <- matrix(nrow=z-x, ncol=w-y) # Set dimensions of your matrix
for(i in 1:(z-x)){ # Summing over all x
for (j in 1:(w-y)){ # Summing over all y
Matrix[i,j] <- f(i+x,j+y) # Evaluate and store in matrix
}}
Matrix <<- Matrix # Assign Matrix outside the function F
}