Как задать имя столбца в dataframe из функции в R

#r #dataframe #naming

#r #фрейм данных #именование

Вопрос:

Я хочу создать пустой фрейм данных в R таким образом, чтобы имя столбца определялось как входной параметр функции, подобной этой:

 testfunc <- function(columname){
  print(data.frame(columname=NA))
}

testfunc('hello')
  

Однако, когда я запускаю функцию, я получаю что-то вроде этого:

 > testfunc('hello')
  columname
1        NA
  

как вы можете видеть, имя столбца columname вместо hello . Что не так с моим кодом? Что он должен сделать, чтобы получить на выходе фрейм данных со столбцом, названным входной строкой функции?

Ответ №1:

Попробуйте создать пустой фрейм данных в функции, а затем вручную назначить нужные имена столбцов:

 testfunc <- function(columname) {
    df <- data.frame(col=character())
    names(df) <- columname
    return(df)
}
  

Конечно, тогда у вас будет пустой фрейм данных, что означает, что вам нужно будет использовать что-то вроде rbind для добавления новых строк.

Причина, по которой ваш текущий подход не будет работать, заключается в том, что вы фактически присваиваете имя columname одному столбцу в вашем фрейме данных. Если вы хотите использовать динамическое строковое имя, вам нужно будет получить доступ names() или что-то подобное.

Комментарии:

1. Спасибо за быстрый ответ! Не могли бы вы также объяснить, почему мой подход не работает? мне это кажется довольно простым (я новичок в R)

2. @FedericoGentile Вы присваиваете имя столбцу фрейма данных, columname а не строковому значению, содержащемуся в columname параметре.

Ответ №2:

Используя assign .

 testfunc <- function(columnname) {
  x <- NA
  assign(columnname, x)
  return(data.frame(mget(columnname)))
}

testfunc('hello')
#   hello
# 1    NA

class(testfunc('hello'))
# [1] "data.frame"*