Update rows in table with set-returning function
This is not going to be fast, but you need a subquery that assigns row numbers for each row that can be used for joining the generated values with the table. You can use with ordinality to generate such number for the result of a set-returning function. 

with numbered as (
  select id, 
         row_number() over (order by id) as rn
  from foo 
)
update foo
  set r = t.val
from (
  select n.id,
         nr.val
  from numbered n
    join normal_rand(1000, 5, 3) with ordinality nr(val,idx) on n.rn = nr.idx
) t
where t.id = foo.id


Replace id with the primary key column of your table.

Online example