【问题标题】:Problems with forloops inside a function R函数R中的forloops问题
【发布时间】:2019-06-26 14:13:52
【问题描述】:

我对以下类型的函数有疑问:

fun.name <- function(x,y) {
    a<-x
    b<-y
    for (i in c(a, b)){
        i<-i+1
        print (i)
    }
    print(a)
    print(b)
}

fun.name(1, 2)

结果是

[1] 2
[1] 3
[1] 1
[1] 2

如果我不创建任何 a 和 b 并且我只保留 x 和 y (fun.name &lt;- function(x,y) { for (i in c(a, b))...),将获得相同的结果。 我无法理解这种行为。 我想要的是一个函数,它为每个参数添加一个并打印结果。为什么循环在函数中定义时不修改变量a和b?我想这是环境的问题,而且我还没有理解函数参数的性质。 感谢您的任何建议。

【问题讨论】:

  • 如下 Tim 的回答所示,for 循环中的每个循环都将 i 设置为值 in c(a,b) 之一。然后你在循环中对 i 进行更改。但是您从不将这些更改分配给 a 或 b,那么 a 或 b 将如何更改?

标签: r function for-loop


【解决方案1】:

我实际上希望看到您当前的输出。这是您的代码,已格式化,并带有 cmets 的解释:

fun.name <- function(x,y) {
    a <- x
    b <- y
    for (i in c(a, b)) {   # i in (1, 2)
        # first iteration: i = 2, print 2
        # second iteration: i = 3, print 3
        i <- i+1
        print(i)
    }
    print(a)  # prints 1 (a was only assigned once)
    print(b)  # prints 2 (same reason as above)
}

fun.name(1, 2)

ab 在函数内部进行初始分配后没有任何变化。但是,即使发生了变化,变量 ab 甚至不会在函数范围之外可见

【讨论】:

  • 我知道c(a,b) 代表c(1,2)。我在想的是创建对象ab,包含值xya &lt;- xb &lt;- y);然后,对于每个对象ab,将对象中包含的值加一分配给对象。最后打印。我应该怎么做?谢谢
  • 定义一个以二维向量为输入的函数,包含初始 a 和 b 值。然后进行数学运算,并在函数末尾返回更新后的向量。
猜你喜欢
  • 2020-09-07
  • 2018-04-18
  • 1970-01-01
  • 2021-02-12
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多