我想把R的术语弄清楚。然而,我读的书都没有多大帮助,而且在我看来,作者有时会随意选择书名。所以,我的问题是,"属性"、"参数"one_answers"参数"究竟是什么时候使用的?
根据我目前所读到的和所理解的,参数是函数可以作为输入的东西。例如,如果我有一个函数计算两个值的和,sum(value1, value2)
, 'value1'和'value2'是函数的参数。
如果调用函数,则调用传递给函数实参的值。对于求和函数示例,"23"one_answers"48"将是以下函数的参数:
sum(23,48).
定义函数时,我们称它为parameter,调用函数时,我们称它为argument(实参传递给函数的形参)
那么"attributes"呢?从我的理解,属性是等效的方法中的参数(方法是类对象的函数)?
例如,如果我要这样写:
heatmap(myData, Colv=NA, Rowv=NA)
…,会'myData'是一个参数或属性?那么Colv=NA
和Rowv=NA
呢?是不是heatmap()是一个函数,因此在括号中的一切都应该被称为参数?
假设我们有:
f <- function(x) x + 1
comment(f) <- "my function"
f(3)
实参我们区分形式实参和实际实参。在上面x
是f
的形式参数。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(f)
[1] "function"
形参有时函数实参被称为形参或者有时被称为那些固定为形参的实参,但这往往与数学和统计学有关,而不是r。
在统计模型中,模型通常是数据的函数,而模型参数通常通过似然。例如:
> lm(demand ~ Time, BOD)
Call:
lm(formula = demand ~ Time, data = BOD)
Coefficients:
(Intercept) Time
8.521 1.721
截距和时间的线性回归系数(即8.521和1.721)通常称为模型参数。
正如Dwin已经指出的,在R中影响图形的各种值也称为参数,可以通过以下方式显示:
> par()
和其他R图形系统中相应的概念通常也被称为参数
我想术语"属性"的通俗用法可能指的是数据对象的几个特性,但在r中有一个非常具体的含义。属性是函数attributes
或attr
返回的值。这对语言来说是至关重要的,因为类和名称被存储为属性。还有另外两个赋值函数:attributes<-
和attr<-
,它们允许赋值额外的属性,以支持类特定的目标。
?attributes
?attr
有一个par
函数用来设置控制基本图形行为的图形"参数"。所以这是r特有的参数用法,可能与"参数"的用法略有不同,"参数"通常应用于函数的形式参数。
?par
这是一个函数args
,它应用于函数名或匿名函数,将返回其参数(作为一个"闭包",就像用户在函数定义期间输入一样,在控制台上打印)以及它们的默认值。函数formals
将以列表的形式返回相同的"参数"信息。
?args
?formals
我意识到我在含蓄地和马修争论,他的R技能很出色。与他相反,我认为attributes
和arguments
在R上下文中具有更具体的含义,细心的作者会努力将它们的含义分开。如果上下文是关于应用函数的讨论,我不会有问题理解某人使用parameter
作为参数的同义词,因为这是数学中的典型说法。我同意你最后一句话的结论。这些都是"参数",而不是属性。由heatmap返回的对象的属性是:
> attributes(hv) #from first example in ?heatmap
#$names
# [1] "rowInd" "colInd" "Rowv" "Colv"
但是只有一些参数成为属性,并且只有在函数执行过程中赋值给返回值之后。
我不确定R和Python有多相似,但我认为大多数术语应该在不同的语言中是一致的。从我最近几天的阅读和学习来看,参数基本上是一个函数在定义时作为其输入的:
my_function <- function (param1, param2){
...
}
,它被称为参数,如果你调用一个函数的某些输入值(作为参数传递给函数):
my_function(arg1, arg2)
作为类的一部分的函数称为方法。属性可以是与类对象(或所谓的实例)关联的值或方法
因此,我们调用参数还是属性的问题取决于我们调用的是什么:函数还是方法。但是我要说的是参数是一个合适的术语如果我们调用heatmap
函数,例如:
heatmap(my_data)
属性:对象的属性,例如Person有String fName, lName;
参数:出现在函数/方法定义中,例如public void setName(fName, lName)
Argument:在调用方法/函数时传递给方法/函数的参数值,例如myPerson。迈克尔setName(""、"杰克逊")