如何应用以两个矩阵和一个向量为输入变量的函数

时间:2018-07-15 08:15:50

标签: r matrix apply

我有2个矩阵和1个向量,打算将它们替换为接受3个变量的函数fun。但是我不知道该如何达到目标。

2个矩阵都有5列,单个向量有5个元素。我打算逐行运行函数,并且可以使用每行的第N个元素和向量的第N个元素。 第一个矩阵eta是:

    eta.1    eta.2    eta.3    eta.4    eta.5
 1.103990 1.345141 1.671156 2.041531 2.435917
 1.031078 1.109853 1.229888 1.380356 1.552349
 1.018405 1.065593 1.139852 1.236245 1.349988
 1.013136 1.046822 1.100638 1.171764 1.257230
 1.010249 1.036439 1.078646 1.135048 1.203625
 1.008425 1.029847 1.064566 1.111308 1.168612
 1.007169 1.025289 1.054776 1.094688 1.143918

第二个矩阵fn是:

     f.1      f.2       f.3       f.4       f.5
 6.27530 15.29211  28.49757  46.41790  69.23123
10.96466 23.60472  39.23650  58.71576  82.53972
14.17965 29.67335  47.61181  68.85091  93.98208
16.78984 34.69621  54.71981  77.67461 104.17505
19.04558 39.07866  61.00511  85.59340 113.45587
21.06106 43.01689  66.70069  92.83912 122.03283
22.89981 46.62361  71.94674  99.55885 130.04526

向量n

1 2 3 4 5

函数运行时,输入元素的使用方式如下:

fun(1.103990, 6.27530,1)
fun(1.345141, 15.29211,2)
...
fun(1.031078,10.96466,1)
fun(1.109853,23.60472,2)

我希望以某种形式一步一步将fun应用于这3个列表:

xxx( fun, eta, fn, n)

1 个答案:

答案 0 :(得分:0)

?mapply可能会有所帮助。这对您有用吗?

fun下面是一个接受三个参数的函数。

x1 <- read.table(
  text = ' 1.103990 1.345141 1.671156 2.041531 2.435917
  1.031078 1.109853 1.229888 1.380356 1.552349
  1.018405 1.065593 1.139852 1.236245 1.349988
  1.013136 1.046822 1.100638 1.171764 1.257230
  1.010249 1.036439 1.078646 1.135048 1.203625
  1.008425 1.029847 1.064566 1.111308 1.168612
  1.007169 1.025289 1.054776 1.094688 1.143918'
)
x2 <- read.table(
  text = ' 6.27530 15.29211  28.49757  46.41790  69.23123
10.96466 23.60472  39.23650  58.71576  82.53972
14.17965 29.67335  47.61181  68.85091  93.98208
16.78984 34.69621  54.71981  77.67461 104.17505
19.04558 39.07866  61.00511  85.59340 113.45587
21.06106 43.01689  66.70069  92.83912 122.03283
22.89981 46.62361  71.94674  99.55885 130.04526'
)
x1 <- t(x1) # Expensive operation in case of large data.frames
x2 <- t(x2) # Expensive operation in case of large data.frames
x3 <- 1:5
fun <- function(x1, x2, x3) {
  sqrt(x1**2 + x2**2 + x3**2)
}
mapply(fun, x1, x2, x3)
[1]   6.449665  15.480892  28.703732  46.634636  69.454279  11.058340  23.715282  39.370237  58.868038  82.705593  14.251302  29.759758
[13]  47.719846  68.978084  94.124672  16.850079  34.769568  54.813037  77.786362 104.302549  19.098553  39.143529  61.088353  85.694332
[25] 113.572370  21.108888  43.075671  66.776608  92.931896 122.140809  22.943751  46.677749  72.016984  99.645185 130.146372