假设您正在尝试在函数中创建数据框。我希望能够提前将列名定义为函数的参数之一。请使用以下代码:
foo <- function(a) {
answer <- data.frame(a=1:5)
return(answer)
}
在上面的例子中,我希望能够在函数foo()
中指定列名的值,例如foo('my.name')
,以便答案的列名为my.name
,而不是a
。我想你可以使用colnames()
在函数内编写代码,但我对另一种方法很感兴趣。
答案 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)
以下是使用substitute
和eval
的替代方法。
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