【问题标题】:Confused about R terminology: Attributes, parameters, and arguments对 R 术语感到困惑:属性、参数和参数
【发布时间】:2013-03-17 17:30:13
【问题描述】:

一劳永逸地,我想正确使用 R 术语。然而,我正在阅读的书籍都没有太大帮助,在我看来,作者有时会随意选择名字。所以,我的问题是什么时候使用“属性”、“参数”和“参数”这些名称?

从我目前阅读和理解的内容来看,参数是函数可以作为输入的内容。例如,如果我有一个计算两个值之和的函数,sum(value1, value2),'value1' 和 'value2' 是函数的参数。

如果我们正在调用一个函数,我们会调用传递给函数参数的值。对于 sum 函数示例,“23”和“48”将是函数参数:

sum(23,48).

所以基本上我们在定义函数时称它为参数,在调用函数时称它为实参(所以实参传递给函数的参数)

但是“属性”呢?据我了解,属性相当于方法中的参数(而方法是类对象的函数)?

例如,如果我有类似的东西:

heatmap(myData, Colv=NA, Rowv=NA)

... ,'myData' 是参数还是属性?那么Colv=NARowv=NA 呢? heatmap() 不是一个函数,因此括号中的所有内容都应该称为参数吗?

【问题讨论】:

  • 作者之间对这些术语的使用不一致。
  • 我认为这让我很困惑。我只是想知道如果我在写这些东西,我应该什么时候使用它,这样对人们来说才有意义
  • 这不应该被关闭。实际和正式的论点是客观地为这里的概念给出的名称,并且问题不是建设性的,也不是特别有争议的,这是不正确的。我正在投票重新打开它。
  • 同意。投票重新开放。认识到一些作者是不精确的,但不是所有的都是有用的。明确使用这些术语值得支持。
  • 你是对的——你的两个答案是令人信服的证据。

标签: r function parameters attributes arguments


【解决方案1】:

假设我们有:

f <- function(x) x + 1
comment(f) <- "my function"
f(3)

参数我们区分形式参数实际参数。在上面的xf正式参数f 的形式参数的名称由以下方式给出:

> names(formals(f))
[1] "x"

函数的实际参数因调用而异,在上面的示例中,只有一个实际参数3

函数args可用于显示函数的整个函数签名,包括形式参数和默认参数,如果您正在调试函数,您可以输入match.call()以列出函数签名和实际参数替换。

属性 R 对象的属性attributes(f) 给出,如下所示:

> attributes(f)
$srcref
function(x) x + 1

$comment
[1] "my function"

有一个例外,就是一个对象的class也被认为是一个属性,但不是上面给出的,而是class给出的:

> class(f)
[1] "function"

参数 有时函数参数被称为 parameters 或者有时一个是指那些固定为参数的参数,但这往往与数学和统计学有关,而不是R.

在统计模型中,模型通常是数据的函数,而模型参数通常是通过似然来实现的。例如,这里:

> lm(demand ~ Time, BOD)

Call:
lm(formula = demand ~ Time, data = BOD)

Coefficients:
(Intercept)         Time  
      8.521        1.721  

Intercept 和 Time 的线性回归系数(即 8.521 和 1.721)通常被称为模型参数。

由于 Dwin 已经 pointed out ,影响 R 中图形的各种值也称为参数,可以通过以下方式显示:

> par()

以及其他R图形系统中对应的概念也常被称为参数。

【讨论】:

  • 感谢您的详尽和确凿的解释。我对 R 很陌生,发现 R 文献中的术语有些混乱。例如,在“R in Action”中,Kabacoff 使用“选项”一词来表示绘图函数的“参数”。
【解决方案2】:

我想通俗地使用术语“属性”可能是指数据对象的几个特征,但在 R 中有一个非常具体的含义。属性是函数返回的值:attributesattr .这些对于将类和名称存储为属性的语言至关重要。还有另外两个分配函数:attributes&lt;-attr&lt;-,它们允许分配其他属性以支持特定于类的目标。

?attributes
?attr

有一个par 函数可以设置控制基本图形行为的图形“参数”。因此,这将是特定于 R 的参数的使用,可能与通常应用于函数的形式参数的“参数”的使用略有不同。

?par

这是一个函数args,它应用于函数名称或匿名函数将返回其参数(作为“闭包”,就像用户在函数定义期间键入一样打印在控制台上)以及它们的默认值。函数formals会以列表的形式返回相同的“参数”信息。

?args
?formals

我意识到我在与 R 技能非常出色的 Matthew 进行含蓄的争论。与他相反,我认为 attributesarguments 在 R 的上下文中具有更具体的含义,谨慎的作者会努力将它们的含义分开。如果上下文显然是关于应用函数的讨论,那么理解使用parameter 作为参数同义词的人不会有问题,因为这是数学中的典型用语。我同意你最后一句话的结论。这些是“论据”,最重要的是不是属性。 heatmap 返回的对象的属性是:

 > attributes(hv)  #from first example in ?heatmap
 #$names
 # [1] "rowInd" "colInd" "Rowv"   "Colv"  

但是只有部分参数变成了属性,然后才在函数执行过程中被赋值给返回值之后。

【讨论】:

  • +1这个问题可能没有建设性,但这个答案确实很有建设性。
【解决方案3】:

我不确定 R 与 Python 有多么相似,但我认为大多数术语在不同语言之间应该是一致的。根据我在过去几天阅读和学习的内容,参数基本上是一个函数在定义它时所接受的输入:

my_function <- function (param1, param2){
...
}

如果您使用某些输入值(作为参数传递给函数)调用函数,则称为 argument

my_function(arg1, arg2)

属于类的函数称为方法属性可以是与类对象(或所谓的instance)关联的值或方法

所以我们是否调用某个参数或属性的问题取决于我们调用的是什么:函数或方法。但我现在要说,如果我们调用 heatmap 函数,argument 是一个合适的术语,例如:

heatmap(my_data)

【讨论】:

    【解决方案4】:

    Attribute :对象的属性,例如Person 有 String fName, lName;

    参数:出现在函数/方法定义中,例如public void setName(fName, lName)

    参数:在调用/调用方法/函数时为方法/函数的参数传递的值,例如myPerson.setName("迈克尔", "杰克逊")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多