Aumentar y disminuir el radio de un círculo usando la transición d3

Estoy tratando de crear un efecto de pulso en un círculo aumentando y disminuyendo su radio. Me gustaría que el círculo crezca y se reduzca en función de un conjunto de datos determinado. Solo puedo obtener la función de transición a éter aumentar o disminuir el radio pero no ambos.

d3 crea automáticamente un círculo diferente para cada valor en la matriz. ¿Cómo puedo hacer que el radio de un círculo crezca y se contraiga a medida que itera a través de la matriz? Una versión simple de lo que tengo hasta ahora está abajo. Gracias por cualquier ayuda que pueda ofrecer.

dataset = [30, 80, 150, 90, 20, 200, 180]

var svg = d3.select("body")
  .append("svg")
  .attr("width", w)
  .attr("height", h);

var circle = svg.selectAll("circle")
  .data(dataset)
  .enter()
  .append("circle");

circle
  .attr("cx", 500)
  .attr("cy", h/2)
  .attr("r", dataset[0])
  .attr("fill", "orange");

Respuestas a la pregunta(2)

Su respuesta a la pregunta