Вам необходимо явно указать количество столбцов при создании фрейма данных:
df <- as.data.frame(matrix(NA, 0, 1))
set.seed(123)
val <- runif(20)
for (i in 1:3){
df[i, ] <- val[[i]]
}
В этом случае матрица с 0 строками и 1 столбцом преобразуется во фрейм данных. Это удобный способ создать пустой фрейм данных с необходимым количеством столбцов.
В вашем случае у вас есть фрейм данных с 0 столбцами. Следовательно, ничто не заселяется.