Как добавить строки в фрейм данных с функцией в R - PullRequest
0 голосов
/ 23 января 2019

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

Сначала я создал пустой фрейм данных с 3 столбцами, 1 символьным столбцом и двумя числовыми столбцами.Я хочу добавить результат каждого алгоритма в этот фрейм данных.Я попробовал это с самодельной функцией 'maker', используя dplyr.

df_com_det_1 <- data.frame(algorithm=character(),groups=numeric(0)
                          ,mod=numeric(0),stringsAsFactors=FALSE)

maker <- function(dataframe, methodused){
  dataframe %>%
    summarise(algorithm = methodused$algorithm,
              groups = length(unique(methodused$membership)),
              mod = methodused$modularity) %>%
    bind_rows(dataframe, .)
}

maker(df_com_det_1, label_propagation_unweighted)

Я надеюсь, что не получу вывод в консоли, но я надеюсь увидеть измененный файл данных df_com_det_1 с добавленной следующей строкой (который теперь возвращается только в консоли):

> maker(df_com_det_1, label_propagation_unweighted)
          algorithm groups       mod
1 label propagation      3 0.4534836

Как мне этого добиться?

1 Ответ

0 голосов
/ 23 января 2019

Когда вы вызываете свою функцию, вы не назначаете результат чему-либо.Попробуйте

df_com_det_1<-maker(df_com_det_1,label_propagation_unweighted)

Когда вы вызываете функцию с вашим фреймом данных, копия этого фрейма создается в новой среде, внутренней для этой функции, и все изменения, внесенные в этот фрейм данных, не отражаются во внешней среде.

Существует способ вносить изменения в глобальную среду изнутри функции (используя <<-), но на самом деле это действительно не рекомендуется.Гораздо лучшим решением будет сделать то, что я предложил выше, и просто присвоить результат вашей функции обратно в фрейм данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...