r
  • vector
  • matrix
  • 2013-11-26 2 views 0 likes 
    0

    Я использую R, чтобы прочитать некоторый XML и преобразовать его в что-то, с чем может работать библиотека deSolve. Я пытаюсь преобразовать эту матрицу:R создать вектор из определенных элементов матрицы

    svars = xpathSApply(doc, "/models/model[@name='SIS']/state_variables/variable") 
    svars = sapply(svars, xmlAttrs) 
    svars 
    
         [,1]   [,2]  
    id "S"   "I"  
    name "susceptible" "infected" 
    value "99"   "1" 
    

    Чтобы вектор, который выглядит следующим образом:

    svars = c(S = 99, I = 1) 
    

    Я немного в недоумении о том, как это сделать, может кто-нибудь помочь?

    ответ

    2

    Например:

    dd <- svars[c("id","value"),] 
    setNames(dd$V2,dd$V3) 
    

    Или один линейный:

    setNames(as.numeric(svars["value", ]), svars["id",]) 
    
    +1

    +1. Также 'setNames (as.numeric (svars [" value ",]), svars [" id ",])' works;) –

    +0

    @Jilber! Я не решаюсь поставить это, но, наконец, я отредактировал свой ответ. – agstudy

    +0

    @agstudy Ваш код сделал трюк, мой код немного отличается: 'state = as.vector (t (svars [значение,]))' 'if (forceNumeric) {' 'state = as.numeric (state) ' '} ' ' names (state) = svars [name,] ' – Blight

    1

    Я думаю, что следующий должен сделать

    x <- as.numeric(svars['value', ]) 
    names(x) <- svars['id', ] 
    x 
    ## S I 
    ## 99 1 
    

    , который так же, как

    c(S = 99, I = 1) 
    ## S I 
    ## 99 1 
    
    Смежные вопросы