通过for循环为R

问题描述

假设我有以下两个变量 y 和 z 以及变量 x

y = 1:10
z = 1:10

现在我想创建一个具有以下功能的雅可比

f <- function(x)  c(y[1]*x[1]+z[1]*x[2],y[2]*x[1]+z[2]*x[2],:   :     :    :
                    y[10]*x[1]+z[10]*x[2])

那么获得雅可比可以很容易地通过

jacobian(f,c(1,1))

现在假设

y= 1:i. 

当 i 变大时,手动计算函数成为一项耗时的任务。

有没有办法为 i 构造相同的函数

我尝试了以下方法

for (i in 1:10) {
  f[i] <- function(x)  c(y[i]*x[1]+z[i]*x[2])
} 

jacobian(f,1))

ThomasIsCoding 建议:

f <- function(x) tcrossprod(cbind(y,z),t(x))

这非常适合这种情况。

现在假设函数更复杂

y[1]*x[1]^2+z[1]/x[2]

建议的 t(x) 不再有效。我现在如何为 x 编写向量?

解决方法

你可以试试下面的函数f

f <- function(x) tcrossprod(cbind(y,z),t(x))