1

我在 R 中构造了一个两个变量整数值函数f(x,y),该函数仅针对单个条目进行了明确定义(例如,不是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)矩阵。为任何帮助干杯!

4

2 回答 2

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
于 2012-12-03T19:34:32.027 回答
-1

我发现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
    }
于 2012-12-03T18:23:15.710 回答