我正在尝试基于给定的数据帧创建一个R函数作为第一个参数,根据提供的参数对数据帧进行子集化:
例如,我的df是这样的:
Date Server1 Server2 Server3 Server4
1/1/2004 10 20 10 5
2/1/2014 4 4 4 20
3/2/2014 1 5 5 39
我需要对此df进行子集化:
例如,如果我传递给此函数(x,Server1,Server3,Server4),它将如下所示:
data<-function(x, ...) {
subset(x, select=c("Server1","Server3", "Server4"))
}
但是,我不应该知道参数列表。它应该适用于不知道列名的所有数据帧。
我有什么想法可以在R中完成这个?
答案 0 :(得分:1)
如果您将参数作为字符串传递,它应该可以正常工作:
subset2<-function(x, ...) {
cols <- c(...)
subset(x, select=cols)
}
subset2(dat, "Server1", "Server3", "Server4")
但我不确定为什么这样的包装是必要的。也许我错过了你的真正目标是什么?
答案 1 :(得分:0)
也许您应该重新考虑是否真的需要围绕subset
的包装函数。据我所知,你的预期函数与subset
本身的作用相同,并且需要相同的参数,并且sintax略有不同。
在任何情况下,如果您不知道列名称,则可以改为使用列索引(例如subset(x, select=c(1,3,4)
)。
答案 2 :(得分:0)
删除子集,就像在其帮助页面上一样,它在一个警告中明确指出它仅用于交互式使用。我没有在这里看到问题,您可以简单地执行以下操作:
data<-function(x, select, ...) {
tmp <- x[select]
# do some stuff with it
return(tmp)
}
一个简单的例子:
data(iris, c("Sepal.Width", "Species"))
# Sepal.Width Species
# 1 3.5 setosa
# 2 3.0 setosa