Добавление суффикса к именам при сохранении результатов в цикле - PullRequest
1 голос
/ 26 мая 2019

Я делаю несколько графиков в R в цикле for и хотел бы сохранить их, используя имя для описания функции, которая выводится на график, а также данные, из которых она получена.

Поэтому, когда у меня есть список из 2 наборов данных "x" и "y", и цикл имеет такую ​​структуру:

x = matrix(
  c(1,2,4,5,6,7,8,9),
  nrow=3,
  ncol=2)

y = matrix(
  c(20,40,60,80,100,120,140,160,180),
  nrow=3,
  ncol=2)

data <- list(x,y)

for (i in data){
  ??? <- boxplot(i)
}

Я бы хотел, чтобы ??? был разделителем "name" + (i) + "_". В этом случае эти 2 графика будут называться «plot_x» и «plot_y».

Я пробовал кое-что с paste("plot", names(i), sep = "_"), но я не уверен, что это то, что использовать, и где и как использовать это в этом сценарии.

Ответы [ 2 ]

1 голос
/ 26 мая 2019

Мы можем создать пустой list с length таким же, как у 'data', а затем сохранить соответствующий вывод из цикла for, циклически повторяя последовательность 'data'

out <- vector('list', length(data))    
for(i in seq_along(data)) {
      out[[i]] <- boxplot(data[[i]])
  }

str(out)
#List of 2
# $ :List of 6
#  ..$ stats: num [1:5, 1:2] 1 1.5 2 3 4 5 5.5 6 6.5 7
#  ..$ n    : num [1:2] 3 3
#  ..$ conf : num [1:2, 1:2] 0.632 3.368 5.088 6.912
#  ..$ out  : num(0) 
#  ..$ group: num(0) 
#  ..$ names: chr [1:2] "1" "2"
# $ :List of 6
#  ..$ stats: num [1:5, 1:2] 20 30 40 50 60 80 90 100 110 120
#  ..$ n    : num [1:2] 3 3
#  ..$ conf : num [1:2, 1:2] 21.8 58.2 81.8 118.2
#  ..$ group: num(0) 
#  ..$ names: chr [1:2] "1" "2"

При необходимости задайте имена элементов list с именами объектов

names(out) <- paste0("plot_", c("x", "y"))

Лучше не создавать несколько объектов в глобальной среде. Вместо этого, как показано выше, поместите объекты в list

0 голосов
/ 26 мая 2019

Акрун прав, вам следует избегать установки имен в глобальной среде.Но если вам действительно нужно, вы можете попробовать это,

> y = matrix(c(20,40,60,80,100,120,140,160,180),ncol=1)
> .GlobalEnv[[paste0("plot_","y")]] <- boxplot(y)
> str(plot_y)
List of 6
 $ stats: num [1:5, 1] 20 60 100 140 180
 $ n    : num 9
 $ conf : num [1:2, 1] 57.9 142.1
 $ out  : num(0)
 $ group: num(0)
 $ names: chr "1"

Вы можете прочитать о .GlobalEnv, введя ?.GlobalEnv в командной строке R.

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