Используйте аргумент функции в качестве имени для нового фрейма данных в R
Это очень просто, но я искал и не смог найти решение этой маленькой проблемы.
Я хочу использовать аргумент функции в качестве имени для нового фрейма данных, например:
assign.dataset<-function(dataname){
x<-c(1,2,3)
y<-c(3,4,5)
dataname<<-rbind(x,y)
}
затем
assign.dataset(new.dataframe.name)
просто создает новый набор данных с именем dataname.
Я пытался использовать функции вставки и назначения, но безуспешно.
Большое спасибо
2 ответа
Решение
Вы можете сделать это так...
assign.dataset<-function(dataname){
x<-c(1,2,3)
y<-c(3,4,5)
assign(deparse(substitute(dataname)), rbind(x,y), envir=.GlobalEnv)
}
assign.dataset(new.dataframe.name)
new.dataframe.name
[,1] [,2] [,3]
x 1 2 3
y 3 4 5
Здесь rlang
эквивалентно ответу Эндрю:
library(rlang)
assign.dataset<-function(dataname){
x<-c(1,2,3)
y<-c(3,4,5)
assign(quo_name(enquo(dataname)), rbind(x,y), envir=.GlobalEnv)
}
assign.dataset(test_df)
enquo
захватывает аргумент, предоставленный пользователем, и связывает его со средой, в которую была вызвана функция, quosure
, quo_name
затем преобразует quosure
в характер.
Однако я бы посоветовал не делать этого, вместо того, чтобы назначать вывод вашей функции объекту. Вот как я бы это сделал:
assign.dataset<-function(){
x<-c(1,2,3)
y<-c(3,4,5)
rbind(x,y)
}
test_df = assign.dataset()
Результат:
[,1] [,2] [,3]
x 1 2 3
y 3 4 5