我有一个向量列表,对于列表中的每个向量,我想提取元素并将它们的值用作函数中的参数。这是到目前为止我提出的总体思路。
#Function to convert parametric values (stored in vector) to multivariate normal random data
ParamsToDat = function(X){
vec = X
MultN = rmvnorm(vec[4],c(vec[2],vec[3],matrix(c(vec[5],vec[1],vec[1],vec[6]), 2, 2, byrow = FALSE)))
return(MultN)
}
# Create list of randomly generated matrices based on parameters
GenData = function(MeanPre,MeanPost,Cov,SampSize,SampSD,IndVar1,IndVar2){
#Use GenParams function to generate list of vectors each of length 6
Params = GenParams(MeanPre,MeanPost,Cov,SampSize,SampSD,IndVar1,IndVar2)
#Use lapply function to create list of matrices of multivariate normal data
MatList = lapply(X = Params, FUN = ParamsToDat)
MultN = list(Matlist = Matlist, Params = Params)
return(MultN)
}
列表Params中的每个元素都是长度为6的向量。我希望函数ParamsToDat提取列表中向量的元素,并将其用作自变量以生成多元正态数据矩阵。该矩阵将替换从中导出值的向量。
很明显,我的ParamsToDat函数或lapply函数或两者都弄乱了,因为它不起作用。任何想法,我怎么能做到这一点?
主要问题是R区分大小写,所以该行
MultN = list(Matlist = Matlist, Params = Params)
应该
MultN = list(Matlist = MatList, Params = Params)
请注意,我已更改Matlist
为MatList
。
我认为放错位置)
仍会给您一个不会导致生产线错误的问题
MultN = rmvnorm(vec[4],c(vec[2],vec[3],matrix(c(vec[5],vec[1],vec[1],vec[6]), 2, 2, byrow = FALSE)))
我猜你真的想要
MultN = rmvnorm(vec[4],c(vec[2],vec[3]),matrix(c(vec[5],vec[1],vec[1],vec[6]), 2, 2, byrow = FALSE))
在您的代码中,您已经花了一些时间来制作一个矩阵,该矩阵看起来像是对的调用中的方差-协方差矩阵rmvnorm()
,但是放错位置)
会将其变成向量,因此尽管您可能期望两个均值和一个有趣的方差-协方差矩阵,最后得到六个均值和方差-协方差矩阵diag(6)
。
希望这可以帮助。祝好运!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句