Проблема в том, как вы используете квадратные скобки, чтобы попытаться сослаться на ваши фреймы данных. Когда вы делаете Patient[1]
, R интерпретирует это как «первый элемент объекта с именем Patient
». Он не осознает, что вам нужен целый объекта с именем Patient1
. Аналогично, он не преобразует Pati
в Pat1
.
. Поэтому в вашем l oop, когда вы делаете Patient[i]
, R выдает ошибку, потому что нет объекта с именем Patient
.
Есть несколько способов решения этой проблемы, но проще всего было бы поместить все ваши фреймы данных в список. Таким образом, вы по-прежнему можете выбирать отдельные кадры данных, вы можете перебирать их и даже объединять их, если хотите.
Если все ваши кадры данных называются Patient1
, Patient2
, et c ., затем этот код поместит их копии в список с именем Observed
:
df_names <- grep("Patient(\\d)+", ls(), value = TRUE)
Observed <- lapply(df_names, get)
names(Observed) <- df_names
Итак, теперь у вас есть список фреймов данных с именем Observed
, который выглядит следующим образом:
Observed
#> $Patient1
#> a b c
#> 1 1 11 21
#> 2 2 12 22
#> 3 3 13 23
#> 4 4 14 24
#> 5 5 15 25
#> 6 6 16 26
#> 7 7 17 27
#> 8 8 18 28
#> 9 9 19 29
#> 10 10 20 30
#>
#> $Patient2
#> a b c
#> 1 1 21 41
#> 2 2 22 42
#> 3 3 23 43
#> 4 4 24 44
#> 5 5 25 45
#> 6 6 26 46
#> 7 7 27 47
#> 8 8 28 48
#> 9 9 29 49
#> 10 10 30 50
Вы можете получить доступ к каждому фрейму данных пациента следующим образом:
Observed$Patient1
#> a b c
#> 1 1 11 21
#> 2 2 12 22
#> 3 3 13 23
#> 4 4 14 24
#> 5 5 15 25
#> 6 6 16 26
#> 7 7 17 27
#> 8 8 18 28
#> 9 9 19 29
#> 10 10 20 30
Если вы хотите объединить их все в один большой фрейм данных, вы можете сделать:
do.call("rbind", Observed)
#> a b c
#> Patient1.1 1 11 21
#> Patient1.2 2 12 22
#> Patient1.3 3 13 23
#> Patient1.4 4 14 24
#> Patient1.5 5 15 25
#> Patient1.6 6 16 26
#> Patient1.7 7 17 27
#> Patient1.8 8 18 28
#> Patient1.9 9 19 29
#> Patient1.10 10 20 30
#> Patient2.1 1 21 41
#> Patient2.2 2 22 42
#> Patient2.3 3 23 43
#> Patient2.4 4 24 44
#> Patient2.5 5 25 45
#> Patient2.6 6 26 46
#> Patient2.7 7 27 47
#> Patient2.8 8 28 48
#> Patient2.9 9 29 49
#> Patient2.10 10 30 50