2013-05-07 99 views
0

随着我的项目变得越来越大,我发现很难跟踪所有参数。在R中是否有任何有效的方法,从而在结构中聚集参数?R函数参数

例如,在我的节目之一,如果

take.bus = TRUE 

然后下面的参数将被使用。

bus.number 
bus.route 
bus.stop 

由于我的程序真的很大,有几个这样的例子,参数的使用依赖于一个变量。我在考虑在take.bus为FALSE时是否可以避免显示相关参数(即bus.number)。

我不确定这个问题是否适合这里。评论它是否有问题。

编辑:

为了更精确:考虑下面的函数:

function(take.bus,bus.number, bus.route, bus.stop){ 

    if(take.bus == T){ 
    x<-temp.func(bus.number,bus.route,bus.stop) 
    } 
} 

所以没有次级参数 “bus.number,bus.route,bus.stop”,将用于如果“take.bus == F”

+3

我认为这个问题很好,但我认为一些细节不会受到伤害。例如,你的意思是“...然后使用下列参数”?如果'take.bus'的计算结果为TRUE,那么可以为这些参数赋值,如果不是,它们会得到一个NULL值或者根本没有被使用? – 2013-05-07 15:16:00

+0

我的参数输入有超过20个参数,但其中大部分参数与上面的示例类似,如果一个参数“打开或关闭”,它们是否将被使用将完全基于。 – user1234440 2013-05-07 15:28:36

+0

@ user1234440如果这三个变量不用于特定的函数调用,则不必提供它们,即'f(FALSE)'不会引发错误。 – 2013-05-07 15:37:32

回答

0

如果这三个参数没有在特定的函数调用中使用,则不必提供它们,也就是说,f(FALSE)不会产生错误。

这是R处理参数传递的一个特性,与其他流行语言稍有不同。对于特定的函数调用,R不会评估提供的参数(丢失或不提供),除非实际需要参数来执行该函数。

0

马修的答案在某些情况下有效,但是你会发现,如果你甚至在块内使用参数,如果它们没有提供并且没有默认值,你会得到一个错误。所以:

many <- function(one, two, three) {print (one);} 
many("bob") 
> "bob" 

工作正常,但

more <- function(one, two, three) { 
    print (one) 
    if(!is.null(two)) { 
    print(two) 
    } 
} 
more("bob") 
> [1] "bob" 
> Error in is.null(two) : 'two' is missing 

是有问题的。您可以为参数分配默认值null,但是您会希望实际传入参数。您可以使用ellipsis传递任意数量的参数(您可以选择将其命名)。检查省略号的边界有点棘手。有关更多信息,请参见here

另外。

请勿使用“T”和“F”!

我可以指定T <- FALSEF <- TRUE,因为它们不是保留字。