这是预期的行为吗?

时间:2017-06-17 18:13:43

标签: r

我很抱歉,如果这是一个模糊的问题,因为我是R的新手。在尝试R时,我发现了一个奇怪的行为。当我创建一个像:

这样的函数时
myfunction <- function(a,b){
    print(a,b)
}

并称之为:

myfunction(b = 10, a = 20)

它返回结果20,但如果我只是通过直接将它分配给变量来调用它而不是函数:

a <- 20
b <- 10
print(a, b)

我收到错误:

Error in print.default(a, b) : invalid 'digits' argument

此外,我已经了解到,可以通过以下方式在同一行中打印多个变量:

sprintf("%i %i",a, b)

所以这是一个错误,它出现在函数调用中,结果作为第一个参数?

1 个答案:

答案 0 :(得分:3)

它可能揭示了在不同场景中如何处理参数的一些潜在差异,但我不认为它是一个错误。

如果您打算打印这两个值,请考虑更改:

print(a,b)

类似于:

print(paste(a,b))

来自?print.default

# S3 method for default
print(x, digits = NULL, quote = TRUE,
  na.print = NULL, print.gap = NULL, right = FALSE,
  max = NULL, useSource = TRUE, …)

x       the object to be printed.

digits  a non-null value for digits specifies the minimum number of 
        significant digits to be printed in values. The default, NULL, uses 
        getOption("digits"). (For the interpretation for complex numbers see 
        signif.) Non-integer values will be rounded down, and only values 
        greater than or equal to 1 and no greater than 22 are accepted.
...

因此,R期望您实际要打印的所有内容都包含在第一个变量(x)中。

根据您的结果和一些评论,显然在某些情况下,第二个变量被接受为有效的digits参数值,而在其他情况下则不是。{

虽然这有点奇怪,但更重要的一点是print(a,b)不是打印多个值的语法正确方法。