我在R中有2个函数,第一个是:
cyii=function(a,b,L)
{
d=outer(a,b,`-`);I=outer(a,b,`==`)
d=d[upper.tri(d,diag=T)];I=I[upper.tri(I,diag=T)]
L[1]^2*exp(-0.25*d^2/L[2]^2) + I*L[3]^2
}
第二个函数多次调用第一个函数
zii=list()
for(i in 1:(n-1))
{
zii[[i]]=cyii(v1,v1,H[c(5*i-4,5*i-3,5*n-3+i)])
}
其中v1是任何数字向量,H是参数向量。以下是可重复的示例。
dput(v1)=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
dput(H)=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
n=3
是否有可能使用apply函数或任何其他方法以避免使用for循环,因为对于每个n我需要提供具有来自H的不同值的第一个函数
答案 0 :(得分:1)
是的,根本不应该是一个问题
# What you supplied
cyii=function(a,b,L)
{
d=outer(a,b,`-`);I=outer(a,b,`==`)
d=d[upper.tri(d,diag=T)];I=I[upper.tri(I,diag=T)]
L[1]^2*exp(-0.25*d^2/L[2]^2) + I*L[3]^2
}
v1=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
H=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
n=3
zii=list()
for(i in 1:(n-1))
{
zii[[i]]=cyii(v1,v1,H[c(5*i-4,5*i-3,5*n-3+i)])
}
# Change it up a little to use 'lapply'
N <- 1:(n-1)
z2 <- lapply(N, function(i){
cyii(v1,v1,H[c(5*i-4,5*i-3,5*n-3+i)])
})
identical(zii,z2)
#[1] TRUE