提前在函数内指定数据帧的列名

时间:2009-11-17 20:27:56

标签: r

假设您正在尝试在函数中创建数据框。我希望能够提前将列名定义为函数的参数之一。请使用以下代码:

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

在上面的例子中,我希望能够在函数foo()中指定列名的值,例如foo('my.name'),以便答案的列名为my.name,而不是a。我想你可以使用colnames()在函数内编写代码,但我对另一种方法很感兴趣。

4 个答案:

答案 0 :(得分:7)

使用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

答案 1 :(得分:4)

以下是使用substituteeval的替代方法。

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

我希望您同意colnames解决方案更简单。

答案 2 :(得分:1)

对Shane的代码进行微调,以防你真的想使用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

答案 3 :(得分:1)

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