我有这个R功能。第一个参数是json数据对象。我将json对象转换为数据帧,然后根据给予此函数的其他参数,我根据给定的参数对数据帧进行子集化。参数可以是数据框中的所有列名称或子集名称的子集,因此它会有所不同。
data<-function(x, ...) {
x<-fromJSON(x)
(x <- lapply(x, function(x) { as.data.frame(x) }))
(x <- do.call(rbind, x))
x<-unique(x)
cols <- c(...)
dd<-cbind(Date=x[,1],subset(x, select=cols))
mm <- melt(dd)
ss <- split(mm, mm$variable)
poo <- unname(Map(function(n,x)
list(name=n, data=unname(lapply(split(x, 1:nrow(x)), function(x) {
list(x$Date, x$value)
}))), names(ss),ss))
p<-toJSON(poo)
return(p)
}
我的问题是这个。给定一个可以使用不同数量参数的函数,如何引用参数?
例如,我有这个数据drame:
structure(list(DateTime = structure(1:8, .Label = c("8/24/2014 15:20",
"8/24/2014 15:55", "8/24/2014 16:04", "8/24/2014 16:18", "8/24/2014 16:27",
"8/24/2014 16:42", "8/24/2014 16:56", "8/24/2014 17:10"), class = "factor"),
Server1 = c(6.09, 4.54, 5.03, 4.93, 6.27, 4.59, 5.91, 4.53
), Server2 = c(5.7, 4.38, 4.52, 4.61, 4.18, 4.61, 4.37, 4.3
), Server3 = c(5.21, 5.33, 4.92, 5.56, 5.62, 6.73, 4.76,
4.59)), .Names = c("DateTime", "Server1", "Server2", "Server3"
), row.names = c("DateTime.1", "DateTime.2", "DateTime.3", "DateTime.4",
"DateTime.5", "DateTime.6", "DateTime.7", "DateTime.8"), class = "data.frame")
我需要调用我的数据函数,
data(x, "DateTime","Server1")
可能还有一段时间:
data(x, "Datetime", "Server1", "Server2")
有没有办法传递函数参数列表?
例如:
arg_list<-c("DateTime", "Server1", "Server3")
data(x, arg_list)
答案 0 :(得分:2)
这里最简单的方法是将列名称作为list
传递。然后,您可以编写该函数,以便无论列表中有多少元素都可以使用,您甚至可以测试列表NA
并对其做出适当的响应。
关于传递参数的问题,参数可以以列表的形式传递给函数。这适用于do.call
例如:
PlottList<-list(x=rnorm(10), y=rnorm(10), col="red",pch=16, xlab="X",ylab="Y")
do.call(plot, PlotList)
如果你想传递一些命名参数并将它们与你可以做的列表结合起来:
PlottList2<-list( y=rnorm(10), col="red",pch=16, xlab="X",ylab="Y")
do.call(plot,c(list(x=rnorm(10)),PlotList2))
请注意x
不在PlotList2
。它表示您在do.call
函数中组合的名称参数。如果您将参数作为list
传递并使用do.call
,那么您不需要提前知道所有参数,当然,假设最终会将w传递给函数认出他们。如果您希望一组表示为...
的未知参数转到一个函数而另一组转到另一个函数,这会很有用,