【问题标题】:How to define a function that takes an argumente outside the paranthesis like names()如何定义一个在括号外接受参数的函数,如 names()
【发布时间】:2020-12-16 02:18:13
【问题描述】:

今天我遇到了一个问题。通常,R 中的每个函数都在其所属的括号内接受参数,例如

# function definition
f <- function(arg){print(arg)}
# function call
f(arg = 3)

但例如,内置函数names() 的工作方式不同。你可以这样称呼它:

x = 3
names(x) <- "aNumber"

这似乎很特殊,因为值 "aNumber" 没有作为常规参数分配给函数 names(),而是分配给函数本身。所以我的问题是如何定义这种类型的函数。

干杯,

菲利普

【问题讨论】:

  • 我怀疑,这将通过 R 中的面向对象编程来解决。

标签: r function side-effects


【解决方案1】:

您可以制作一个用户定义的中缀运算符,例如:

`%x%` <- function(a, b) {a * b}
2 %x% 3
#[1] 6

一个用户定义的替换/赋值函数比如:

`x<-` <- function(x, value) {x * value}
y  <- 2
x(y) <- 3
y
#[1] 6

另请参阅:3.4.4 Subset assignment6.8 Function forms

【讨论】:

  • 您好 Gki,感谢您的回答。正如您正确指出的那样,我要定义的是替换运算符。有趣的是,在定义此类运算符时,参数 "value" 似乎是一个要求。
  • 如果我将参数“值”重命名为其他名称,例如“val”我收到以下错误消息:x&lt;-(*tmp*, value = 3) 中的错误:未使用的参数 (value = 3) 此外,这些运算符似乎“违反”了 R 的函数式编程范式,因为这些特殊函数有一个副作用,即它们操纵分配的参数 y。通常,(如果不使用
猜你喜欢
  • 2017-03-27
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多