为什么R';s attributes()函数在使用显式参数时失败?

为什么R';s attributes()函数在使用显式参数时失败?,r,attributes,rstudio,R,Attributes,Rstudio,我正在使用RODBC和parallel对数据系统进行多个查询,以获取一些内部报告。为了便于建立新的连接,我将从RODBC对象中提取连接字符串。为此,我计划使用attributes()。然而,我遇到了一个我不理解的行为。下面是一个简单的工作示例: > example.data <- data.frame(letters = sample(x = LETTERS,size = 20,replace = T), + numbers =

我正在使用
RODBC
parallel
对数据系统进行多个查询,以获取一些内部报告。为了便于建立新的连接,我将从
RODBC
对象中提取连接字符串。为此,我计划使用
attributes()
。然而,我遇到了一个我不理解的行为。下面是一个简单的工作示例:

> example.data <- data.frame(letters = sample(x = LETTERS,size = 20,replace = T),
+                            numbers = sample(x = 0:9,size = 20,replace = T))
> 
> attributes(obj = example.data)
Error in attributes(obj = example.data) : 
  supplied argument name 'obj' does not match 'x'
> attributes(example.data)
$names
[1] "letters" "numbers"

$row.names
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

$class
[1] "data.frame"
<代码>>示例数据 >属性(obj=example.data) 属性错误(obj=example.data): 提供的参数名称“obj”与“x”不匹配 >属性(例如.data) $names [1] “字母”“数字” $row.name [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 美元级 [1] “数据帧” 应该注意的是,
obj=
行为是RStudio建议的一个选项卡。但是,它会导致错误。我试图查看
属性的源代码,但它是一个原始代码,因此我必须深入研究C源代码,我对C源代码不太熟悉


为什么使用显式参数(
obj=
)时
attributes()
会失败,但不使用时运行良好?(RStudio关于建议
obj=
的行为是否应该改变?

这似乎是属性文档中的一个bug。该参数可能应命名为
x
。你可以这么说

attributes(x = example.data)
问题在于
attributes()
是一个基本函数,基本函数的行为与R中的常规函数不同。它们没有形式参数(
formals(attributes)
返回
NULL
)。对于这些类型的函数,R通常不会按名称解析出参数,并且出于效率原因,会假定它们处于特定的位置顺序。这就是为什么最好不要命名它们,因为您无法更改这些参数的顺序。这里不需要命名参数

还有其他函数在文档中的参数名和代码检查的值之间存在不匹配。比如说

isS4(pi)
# [1] FALSE
# documented parameter name is "object"
isS4(object=pi)
# Error in isS4(object = pi) : 
#   supplied argument name 'object' does not match 'x'
isS4(x=pi)
# [1] FALSE

但也有其他原语使用的名称不是
x
:例如
seq_along
(使用“along.with=”)和
quote
(使用“expr=”)。

很好。有趣的是,它确实与
属性(x=…)
一起工作,因此似乎R核心的某些人可能忘记了更改某些内容。但通常情况下,我们不会使用
obj=
,因为这是
attributes()
的唯一参数,不确定我们应该在页面上的什么位置查找,但这里是。我认为这是
dou属性
,但我不确定。我们需要一个叫Joshua.huh的人,出于某种原因,它通过
Rf\u check1arg