задание имен столбцов фрейма данных внутри функции заблаговременно - PullRequest
4 голосов
/ 17 ноября 2009

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

  foo <- function(a) {
    answer <- data.frame(a=1:5)
    return(answer)
    }

В приведенном выше примере я хотел бы иметь возможность указать значение имени столбца в функции foo(), например, foo('my.name'), чтобы у ответа было имя столбца my.name вместо a. Я полагаю, вы могли бы закодировать это внутри функции, используя colnames(), но меня интересовал альтернативный подход.

Ответы [ 4 ]

7 голосов
/ 17 ноября 2009

Использование colnames - единственный известный мне способ для data.frame, хотя colnames () сама по себе является вектором, поэтому нет необходимости выполнять какие-либо итерации с ней. Эта версия обрабатывает две колонки:

foo <- function(cname) {
   answer <- data.frame(1:5, 1:5)
   colnames(answer) <- cname
   return(answer)
}
> foo(c("a","b"))
  a b
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
4 голосов
/ 18 ноября 2009

Вот альтернатива с использованием substitute и eval.

foo <- function(var) {
  eval(substitute(data.frame(var = 1:5)), list(var = as.name(var)))
}

Надеюсь, вы согласитесь, что решение colnames проще.

1 голос
/ 03 августа 2014

Достаточно функции setNames:

> foo <- function(a,nm) {
+     answer <- data.frame(a=1:5)
+     setNames(answer, nm)
+     }
> foo(1:10, 'bar')
  bar
1   1
2   2
3   3
4   4
5   5
1 голос
/ 18 ноября 2009

Незначительная корректировка кода Шейна, в случае, если вы действительно хотите использовать substitute, или вы действительно не можете печатать дополнительные кавычки.

foo <- function(a) {
   answer <- data.frame(1:5)
   colnames(answer) <- as.character(substitute(a))
   answer
}
foo(mycolname)

  mycolname
1         1
2         2
3         3
4         4
5         5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...