#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"*