Используйте аргумент функции в качестве имени для нового фрейма данных в 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
Другие вопросы по тегам