【问题标题】:Strange result from function [duplicate]函数的奇怪结果[重复]
【发布时间】:2020-10-22 16:40:41
【问题描述】:

我认为我在这里的错误是对函数如何在 R 中运行的误解,但我确实担心这可能会给我带来一些奇怪的结果。

如果我在函数之外声明一个参数,它会覆盖函数调用中声明的所有参数。

x<- 6

example<- function(...){
print(x^2)
}

example()

返回 36。我可以接受。

但是,如果我再次运行该函数并声明变量,它将被忽略。

example(x =5)

仍然返回 36。

我能理解发生了什么,但我真的不明白为什么。在这种情况下使用 ... 不好的做法吗?

如果我的功能是

example<- function(x){
print(x^2)
}

它有效。

【问题讨论】:

  • 相关,可能重复stackoverflow.com/q/5890576/680068 换句话说阅读手册:?dots
  • 你可以试试:example1 &lt;- function(...){print(list(...)[["x"]]^2)}example2 &lt;- function(...){list2env(list(...), environment()); print(x^2)}
  • 谢谢 - 我看到了这些答案和下面的答案。我不认为这是重复的,因为我正在寻找正在发生的事情,并寻求最佳实践的指导。

标签: r


【解决方案1】:

理想情况下你应该写的是:

example<- function(...){
    x <- c(...)
    x^2
}

example(5)
#[1] 25

example(5, 6)
#[1] 25 36

example() 将返回一个空值,因为您没有传递任何内容。不要依赖在函数中评估的全局变量。您应该在函数中显式传递变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-04
    • 2015-04-14
    • 1970-01-01
    • 2017-05-14
    • 2022-11-01
    • 2019-06-12
    • 2014-12-07
    • 2020-08-12
    相关资源
    最近更新 更多