为什么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