如何在R点之后指定参数?

时间:2014-11-25 23:51:59

标签: r

这可能归结为“如何将可选参数传递给R函数”。 以c()为例。它的定义是:

c(..., recursive = FALSE)

但是,如果我像c(1:5, TRUE)一样使用它,它会给[1] 1 2 3 4 5 1这是完全可以理解的,但也有点奇怪,因为我希望它很容易理解。我想这很简单,我根本就没有看到整件事。

欢呼回答而不是肆虐。我用Google搜索并搜索过,但可能有太多错误的答案并放弃了。

编辑:由于不合逻辑的例子而被编辑。

1 个答案:

答案 0 :(得分:5)

我在等着看是否有任何第一批评论者要回答,但他们并非如此。

因为在c()的定义中,第一个参数是...,所以必须完全命名后面的任何参数才能使它们正常工作。我说论证复数而不是论证单数,因为在c()中实际上存在第二个未记载的论证。有关详情,请参阅Why does function c() accept an undocumented argument?。对于...之前的参数,您可以使用部分参数匹配,但对于...之后的参数,您必须编写完整的参数名称。

您的示例中发生的是您将TRUE(即1)的数值与向量1:5

连接起来
as.numeric(TRUE)            ## numeric value of TRUE
# [1] 1
c(1:5, TRUE)                ## try no arg name, wrong result
# [1] 1 2 3 4 5 1
c(1:5, rec=TRUE)            ## try partial arg matching, wrong result
#                    rec 
#  1   2   3   4   5   1 

此外,recursive实际上并没有以您尝试使用它的方式执行任何操作。

c(1:5)
# [1] 1 2 3 4 5
c(1:5, recursive=TRUE)      ## 1:5 not recursive, same result
# [1] 1 2 3 4 5
is.recursive(c(1:5))
# [1] FALSE

它更适用于连接列表项或任何其他递归对象(请参阅?is.recursive)。

(x <- as.list(1:5))
# [[1]]
# [1] 1
# 
# [[2]]
# [1] 2
# 
# [[3]]
# [1] 3
# 
# [[4]]
# [1] 4
# 
# [[5]]
# [1] 5
is.recursive(x)
# [1] TRUE
c(x, recursive=TRUE)        ## correct usage on recursive object x
# [1] 1 2 3 4 5