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

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

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

testfunc('hello')

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

> testfunc('hello')
  columname
1        NA

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

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

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

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

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

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

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

Использование 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"*
...