Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过函数参数基于提供的列名对R数据帧进行子集划分?_R - Fatal编程技术网

如何通过函数参数基于提供的列名对R数据帧进行子集划分?

如何通过函数参数基于提供的列名对R数据帧进行子集划分?,r,R,我试图基于给定的数据帧创建一个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 data<-function(x, ...) { su

我试图基于给定的数据帧创建一个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
data<-function(x, ...) {

subset(x, select=c("Server1","Server3", "Server4"))
}
subset2<-function(x, ...) {
  cols <- c(...)
  subset(x, select=cols)
}

subset2(dat, "Server1", "Server3", "Server4")
我需要将此df子集:

例如,如果我传递给此函数(x、Server1、Server3、Server4),它将如下所示:

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
data<-function(x, ...) {

subset(x, select=c("Server1","Server3", "Server4"))
}
subset2<-function(x, ...) {
  cols <- c(...)
  subset(x, select=cols)
}

subset2(dat, "Server1", "Server3", "Server4")

data如果将参数作为字符串传递,它应该可以像这样工作:

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
data<-function(x, ...) {

subset(x, select=c("Server1","Server3", "Server4"))
}
subset2<-function(x, ...) {
  cols <- c(...)
  subset(x, select=cols)
}

subset2(dat, "Server1", "Server3", "Server4")

subset2也许您应该重新考虑是否确实需要在
subset
周围使用包装函数。就我所见,您想要的函数与
subset
本身的功能相同,并且需要相同的参数,但sintax略有不同


在任何情况下,如果您不知道列名,可以改用列索引(例如
subset(x,select=c(1,3,4)
)。

摆脱subset,因为在其帮助页面上,它在警告中特别指出,它仅用于交互用途。我不认为这里有问题,您可以简单地执行以下操作:

data<-function(x, select, ...) {
    tmp <- x[select]
    # do some stuff with it
    return(tmp)
}