我想在R中创建一个空数据帧,使列名被定义为函数的输入参数,如下所示:
testfunc <- function(columname){
print(data.frame(columname=NA))
}
testfunc('hello')
但是,当我运行该功能时,我得到的是这样的:
> testfunc('hello')
columname
1 NA
你可以看到列名是columname
而不是hello
。我的代码有什么问题?它应该怎么做才能使用名为函数输入字符串的列作为输出获取数据帧?
尝试在函数中创建一个空数据框,然后手动分配所需的列名:
testfunc <- function(columname) {
df <- data.frame(col=character())
names(df) <- columname
return(df)
}
当然,那么你会有一个空的数据框,这意味着你需要使用像rbind
这样的东西来添加新的行。
您当前方法不起作用的原因是您实际上将名称columname
分配给数据框中的单个列。如果要使用动态字符串名称,则必须访问names()
或类似名称。
使用assign
。
testfunc <- function(columnname) {
x <- NA
assign(columnname, x)
return(data.frame(mget(columnname)))
}
testfunc('hello')
# hello
# 1 NA
class(testfunc('hello'))
# [1] "data.frame"*