R и листок: как организовать текст ярлыка по нескольким строкам

Предположим, у вас есть следующий фрейм данных:

cities = data.frame( name = c('Madrid','Barcelona','Sevilla'),
                 country = c('Spain','Spain','Spain'),
                 region = c('Comunidad de Madrid','Cataluña','Andalucia'),
                 data = c(100, 200, 300), 
                 lng = c(-3.683333,2.166667,-6.083333),
                 lat = c(40.433333,41.383333,37.446667))

Моя идея - иметь карту этих городов и ярлыков, которые могли бы отображать некоторую релевантную информацию при наведении соответствующих кругов города. Я бы хотел, чтобы текст ярлыка располагался в нескольких строках. Не удалось выполнить самый первый подход ниже:

library( leaflet )

map = leaflet( cities ) %>%
addTiles() %>%
addCircles( lng = ~lng, lat = ~lat, fillColor = 'darkBlue', radius = 10000, 
          stroke = FALSE, fillOpacity = 0.8, label = paste0( cities$name,'\n', cities$region, '\n', cities$country, '\n', cities$data ) )

а также другие подобные попытки. После некоторого поиска в Google я нашел возможное решение, связав пакет htmltools:

library( htmltools )
map2 = leaflet( cities ) %>%
addTiles() %>%
addCircles( lng = ~lng, lat = ~lat, fillColor = 'darkBlue', radius = 10000, 
          stroke = FALSE, fillOpacity = 0.8, 
          label = HTML( paste0( '<p>', cities$name, '<p></p>', cities$region, ', ', cities$country,'</p><p>', cities$data, '</p>' ) ) )

В этом случае информация отображается так, как мне хотелось бы, но на том же ярлыке есть запись для каждого города набора данных. Как я мог сделать, чтобы текст одного города был организован в нескольких строках? Любая помощь будет действительно оценена

Ответ 1

Сначала создайте символьный вектор содержимого html для каждого города, а затем оберните его в вызове lapply чтобы установить атрибут HTML для правильного отображения при определении атрибута label в adCircles

labs <- lapply(seq(nrow(cities)), function(i) {
  paste0( '<p>', cities[i, "name"], '<p></p>', 
          cities[i, "region"], ', ', 
          cities[i, "country"],'</p><p>', 
          cities[i, "data"], '</p>' ) 
})

map2 = leaflet( cities ) %>%
  addTiles() %>%
  addCircles(lng = ~lng, lat = ~lat, fillColor = 'darkBlue', radius = 10000, 
              stroke = FALSE, fillOpacity = 0.8,
              label = lapply(labs, htmltools::HTML))

map2