我有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)
答案 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