У меня есть функция, которая возвращает фрейм данных с более чем 50 столбцами (одна строка).
Эта функция вызывается внутри цикла (lapply), поэтому я получаю список информационных фреймов по одной строке в каждом.
Я инициализирую пустой фрейм данных в самом начале функции, которая будет заполнена фактическими данными, возвращаемыми процессом (короткая версия здесь для тестирования)
df <- read.csv(text = "conn,pc,server,profile")
R> df
[1] conn pc server profile car id amount
<0 rows> (or 0-length row.names)
Я хотел бы присвоить значения строке, учитывая, что процесс иногда не возвращает значения для всех столбцов.
Подобные вопросы SO имеют тенденцию полагаться на инициализацию фрейма данных следующим образом:
df <- data.frame("conn"= NA, "pc"= NA, "server"= NA, "profile" = NA)
но мне не нужна строка NA, если значение не возвращено.
Итак, в своей функции я сначала попробовал:
returned.conn.value <- 3 # assigned by hand for the sake of simplicity
df$conn <- returned.conn.value
Error in `$<-.data.frame`(`*tmp*`, conn, value = 3) :
replacement has 1 row, data has 0
Итак, я обнаружил, что нет способа добавить значение в столбец внутри пустого фрейма данных, но .....
df[1,1] <- 3
Это, к моему удивлению, сработало. Но я считаю очень уродливым присваивать значения столбцам по индексу, поэтому я попробовал это:
grep("^conn$", colnames(df))
[1] 1
Действительно более уродливо, так как заставляет меня писать одну и ту же строку для каждого столбца (вместо подсчета вручную, да)
Итак, боюсь, я выбрал мертвую дорогу, ведущую в никуда.
есть ли способ инициализировать пустой фрейм данных, поскольку это позволит мне выполнять простые задания, как показано ниже, без проблем?
df$conn <- 3
Любая подсказка будет высоко оценена.