Как выделить всю строку в R, а не только первый элемент? - PullRequest
4 голосов
/ 20 сентября 2019

Я пытаюсь собрать весь массив данных (часы 0, 3, 6 ... 48).Мой код в настоящее время только собирает hh = 0, потому что «имя» строки содержит запятую.

Данные в tempjson $ score_value структурированы следующим образом:

tempjson$score_value
         [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]
[1,] 3.492809 2.962649 2.770052 2.756788 2.332905 2.338647 2.719658 3.080747
[2,] 3.558785 3.581791 3.475497 3.451713 3.009123 3.104995 3.397145 3.781619

и т. Д.

Я пытаюсь построить значение оценки для каждого часа (каждого столбца) дляоба эксперимента (оба ряда).

tempjson$score_value[1]
[1] 3.492809

выбирает только самый первый элемент, но

> tempjson$score_value[1,]
 [1] 3.492809 2.962649 2.770052 2.756788 2.332905 2.338647 2.719658 3.080747
3.406330 3.281600 3.028505 2.976836 2.575598 2.421316 2.894790 3.132405
3.541107

предоставляет всю строку.Мой код представляет собой цикл for, который пытается скомпилировать массив временных значений всех значений часов для обоих экспериментов [2x17]:

 for(exp in seq(1,length(expname)))
      for(hh in tempjson$label[[exp]])
           tempscore[exp,which(list.runhour==hh)]=tempjson$score_value[[exp]][which(tempjson$label[[exp]]==hh)]

где:

> expname
[1] "experiment1"  "experiment2"

и

> list.runhour
 [1] "0"  "3"  "6"  "9"  "12" "15" "18" "21" "24" "27" "30" "33" "36" "39" "42"
[16] "45" "48"

и

> tempjson$label
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
[1,] "0"  "3"  "6"  "9"  "12" "15" "18" "21" "24" "27"  "30"  "33"  "36"  "39"
[2,] "0"  "3"  "6"  "9"  "12" "15" "18" "21" "24" "27"  "30"  "33"  "36"  "39"
     [,15] [,16] [,17]
[1,] "42"  "45"  "48"
[2,] "42"  "45"  "48"

и

> tempjson$score_value
         [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]
[1,] 3.492809 2.962649 2.770052 2.756788 2.332905 2.338647 2.719658 3.080747
[2,] 3.558785 3.581791 3.475497 3.451713 3.009123 3.104995 3.397145 3.781619
         [,9]   [,10]    [,11]    [,12]    [,13]    [,14]    [,15]    [,16]
[1,] 3.406330 3.28160 3.028505 2.976836 2.575598 2.421316 2.894790 3.132405
[2,] 4.163044 3.89846 3.626449 3.615926 3.260005 3.190443 3.648776 3.873211
        [,17]
[1,] 3.541107
[2,] 4.256343

Запуск этого кода будет результатом строки 1 в exp = [1], а не [1,].Таким образом, hh only ever = "0", а не 16 других значений [массив 1x17 от 0 до 48].

Как получить exp равным имени строки, т.е. [1,], чтобы цикл for правильно вызывал все столбцы (чч)?

1 Ответ

1 голос
/ 20 сентября 2019

Мы можем использовать , для отделения индекса строки от индекса столбца.С matrix, если мы используем только один индекс 'n', он извлечет 'n' -й элемент, так как matrix является vector с dim атрибутами

tempjson$score_value[1, , drop = FALSE]

Здесь,drop = FALSE используется, чтобы избежать потери матрицы размеров, когда число строк или столбцов равно 1. Это объясняется в ?Extract

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...