R 将工作代码包装到函数中,它将停止工作

R 将工作代码包装到函数中,它将停止工作,r,function,scoping,R,Function,Scoping,我有一些代码运行得很好,我在 在我的代码中多次使用相同的格式,因此我尝试将 它在一个广义函数中,一旦我这样做,它就会停止 工作我不知道为什么,但我错过了一些东西 基本的。很高兴你能告诉我我的基本错误。谢谢。J 在代码中工作的函数的格式为: vec1[ as.logical (vec1 == val1 & vec2 >= val2)] <- val3 不会发生任何事情,它不会改变vec1中的任何值,即使 应该这样。它运行并且不会抛出任何错误或警告。这可能是一个“范围界定”问题

我有一些代码运行得很好,我在 在我的代码中多次使用相同的格式,因此我尝试将 它在一个广义函数中,一旦我这样做,它就会停止 工作我不知道为什么,但我错过了一些东西 基本的。很高兴你能告诉我我的基本错误。谢谢。J

在代码中工作的函数的格式为:

vec1[ as.logical (vec1 == val1 & vec2 >= val2)] <- val3
不会发生任何事情,它不会改变vec1中的任何值,即使
应该这样。它运行并且不会抛出任何错误或警告。这可能是一个“范围界定”问题吗?如果是这样,我如何修复它呢?

正如Sotos所说,您缺少了一条
return
语句。函数中发生的是一个无声的返回。考虑下面的例子。如果我们将
add
函数定义为

add <- function(x, y){
  z <- x + y
}
看起来好像什么也没有返回。没有打印到控制台的输出

另一方面,看看当我们将函数的结果分配给一个对象时会发生什么:

z <- add(1, 2)
z


ChangeState=val2)]正如索托斯所说,您缺少一条
return
语句。函数中发生的是一个无声的返回。考虑下面的例子。如果我们将
add
函数定义为

add <- function(x, y){
  z <- x + y
}
看起来好像什么也没有返回。没有打印到控制台的输出

另一方面,看看当我们将函数的结果分配给一个对象时会发生什么:

z <- add(1, 2)
z


ChangeState=val2)]您需要在函数中返回Vec1<代码>返回(Vec1)
您需要在函数中返回Vec1<代码>返回(Vec1)
z <- add(1, 2)
z
ChangeState <- function (vec1, vec2, val1, val2, val3) {
    vec1[as.logical(vec1 == va1 & vec2 >= val2)] <- val3
    vec1 # implicit return
}
ChangeState <- function (vec1, vec2, val1, val2, val3) {
    vec1[as.logical(vec1 == va1 & vec2 >= val2)] <- val3
    return(vec1) # explicit return
}