首页 文章

R lapply在向量列表上;提取要在函数中使用的向量元素

提问于
浏览
2

我有一个向量列表,对于列表中的每个向量,我想提取元素并将它们的值用作函数中的参数 . 这是我到目前为止所提出的一般概念 .

#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函数或两者都搞乱了,因为它不起作用 . 任何想法我怎么能做到这一点?

2 回答

  • 0

    主要问题是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))
    

    在你的代码中,'ve spent the time to make a matrix that looks like it'应该是对 rmvnorm() 的调用中的方差 - 协方差矩阵,但错位的 ) 会将其转换回向量,所以你可能期望有两种方法和一个有趣的方差 - 协方差矩阵,你最终得到六个均值和方差 - 协方差矩阵 diag(6) .

    希望这可以帮助 . 祝好运!

  • 0

    这是我的解决方案 . 谢谢你的回复 .

    ### This function accepts a vector of length six and converts it to bivariate normal data ###
    VecToNorm = function(vec){
      BivNorm = abs(round(rmvnorm(vec[4],c(vec[2],vec[3]),matrix(c(vec[5],vec[1],vec[1],vec[6]), 2, 2, byrow = FALSE))))
      return(BivNorm)
    }
    
    
    ### Function to convert parametric values from list of vectors to multivariate normal random data ###
    ParamsToDat2 = function(Params){
      Data = lapply(Params, FUN = VecToNorm)
    }
    

相关问题