gpt4 book ai didi

r - 将工作代码包装在函数中,它会停止工作

转载 作者:行者123 更新时间:2023-12-02 02:51:11 24 4
gpt4 key购买 nike

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

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

vec1[ as.logical (vec1 == val1 & vec2 >= val2)] <- val3

因此这会将 vec1 中的值从当前值更改为 val3,当条件满足时。但是,如果我创建一个这样的函数作为

ChangeState <- function (vec1, vec2, val1, val2, val3) {
vec1[as.logical(vec1 == va1 & vec2 >= val2)] <- val3
}

然后我这样执行它:

ChangeState(inputvec1, inputvec2, value1, value2, value3)

什么也没发生,它不会改变 vec1 中的任何值,即使它应该。它运行并且不会抛出任何错误或警告。这可能是一个“范围界定”问题吗?如果是这样我该如何修复它?

最佳答案

正如 Sotos 所说,您缺少 return 语句。你的函数中发生的事情是无声返回。考虑以下示例。如果我们将 add 函数定义为

add <- function(x, y){
z <- x + y
}

然后调用

add(1, 2)

看起来好像没有返回任何内容。控制台没有打印任何输出。

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

z <- add(1, 2)
z

[1] 3

因此,如果没有 return 语句,该函数就可以静默返回一个值。通常提供某种形式的 return 语句(无论是隐式的还是显式的)。

对于您的函数,一个重要的警告是您需要一个返回语句。尽管您仅对 vec1 的子集执行替换,但如果不使用 return 语句,您的函数将仅返回满足 as 的 vec1 子集.逻辑(vec1 == va1 & vec2 >= val2)。因此,为了获得您(大概)想要的输出,您应该使用

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
}

关于r - 将工作代码包装在函数中,它会停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61954897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com