我有两个向量
randomName1 = c(4,5,6,3,2,1)
randomName2 = c(3,4,5,6,7,4)
可以使用此简单功能轻松合并为数据框
fun = function(x, y) {
df = data.frame(x, y)
df
}
fun(randomName1,randomName2)
x y
1 4 3
2 5 4
3 6 5
4 3 6
5 2 7
6 1 4
但矢量已丢失其名称。您可以在函数中再添加两个参数,并执行以下操作:
fun = function(x, y, name1, name2) {
df = data.frame(x, y)
colnames(df) = c(name1, name2)
df
}
fun(randomName1, randomName2, "randomName1", "randomName2")
randomName1 randomName2
1 4 3
2 5 4
3 6 5
4 3 6
5 2 7
6 1 4
但是在这种情况下,我们需要额外的参数,不能仅仅直接传递向量。有没有一种简单的方法可以将向量的名称保留为数据帧的列名称,而无需添加更多函数参数?
答案 0 :(得分:2)
问题是,当您使用参数x
和y
将两个向量传递到函数中时,它们在函数范围内被重命名为x
和{{1} }。因此,当您将它们放入带有y
的数据框中时,它们的新名称将保留在data.frame(x,y)
中。
为防止这种情况,您需要使用原始名称传递它们,您可以使用colnames
:
...
f <- function(...) {
df <- data.frame(...)
return(df)
}
f(randomName1, randomName2)
randomName1 randomName2
1 4 3
2 5 4
3 6 5
4 3 6
5 2 7
6 1 4
参数获取未分配给命名参数的所有参数,并使它们在函数中可用。由于我们没有将...
和randomName1
分配给参数,因此它们会以其原始名称传递到randomName2
中,而这些名称将保存在data.frame