我在R中的“应用”类型函数挣扎。 我有一个矩阵,我想要的是使用矩阵的每一行的元素,使用一个用户 - 定义函数根据矩阵的输入进行一些计算,并创建一个新的函数来存储这些计算的结果。使用矩阵的每一行中的元素应用函数
我已经找到了如何做到这一点,当函数返回只有一个输出
因此,例如,假设矩阵A和执行某种计算的函数。
> A=matrix(1:16,nrow=4)
> A
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
> B=apply(A,1,FUN=function(x) x[1]**2+2*x[2]+x[3]*x[4])
> B
[1] 128 156 188 224
我所需要的是在输出多于一个元素的向量的情况下延伸这一点,想象例如,我想计算的三个不同多项式来代替一个值如示例并再次获得将包含这三个多项式的计算的4×3矩阵。
目前,我正在用一个“for”循环来做这件事,循环逐行读取数据,执行函数并将结果存储在一个新的矩阵中,但速度很慢。 一个例子是:
A=matrix(1:16,nrow=4)
A
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
calc=function(e1,e2,e3,e4){
x1=e1*e2+3*e3*e4
x2=e4+e2+5*e3**2-e4
x3=e1*e2*e3*e4
return(c(x1,x2,x3))
}
results=matrix(nrow=4,ncol=3)
for (i in 1:4){
k=calc(A[i,1],A[i,2],A[i,3],A[i,4])
results[i,]=k
}
results
[,1] [,2] [,3]
[1,] 356 410 585
[2,] 432 506 1680
[3,] 516 612 3465
[4,] 608 728 6144
的,我怎么能采用类似操作,以避免基质的“为”任何想法都欢迎。 (我没有限制到应用程序包)
如果您包括您'for'循环可能更容易弄清楚如何使用'apply'重写。 – janos
我扩展了结果 – KGeor