gpt4 book ai didi

r - 管道到 R 函数中的 return() 时的奇怪行为?

转载 作者:行者123 更新时间:2023-12-04 10:55:16 24 4
gpt4 key购买 nike

在某些情况下,到 return() 的管道似乎没有按预期运行。为了演示,这里有 4 个案例

假设我们定义了一个返回str_replace_all

结果的函数
library(stringr)
library(dplyr)

string <- letters[1:9] %>% paste0(collapse="")

funct <- function(string) {

return(string %>% str_replace_all(., "ef", "HHH"))

}

funct(string)
# [1] "abcdHHHghi"

现在假设我们通过管道传输到 return - 函数按预期工作

funct <- function(string) {

string %>% str_replace_all(., "ef", "HHH") %>% return(.)

}

funct(string)
# [1] "abcdHHHghi"

但如果我们在返回之后添加一些任意命令,我们不会得到预期的输出 ([1] "abcdHHHghi")

funct <- function(string) {

string %>% str_replace_all(., "ef", "HHH") %>% return(.)

print('hi')

}

funct(string)
# [1] "hi"

请注意,如果我们不通过管道传输到return,我们看到预期的行为

funct <- function(string) {

return(string %>% str_replace_all(., "ef", "HHH"))

print('hi')
}

funct(string)
# [1] "abcdHHHghi"

问题

导致此行为的原因是什么?我们如何让 return 返回(如预期的那样)?

期望的输出

funct <- function(string) {

string %>% str_replace_all(., "ef", "HHH") %>% return(.)

print('hi')

}

funct(string)

应该返回# [1] "abcdHHHghi"

注意事项

基于 piping to ls() 时类似的奇怪行为, 我试过了

funct <- function(string) {

string %>% str_replace_all(., "ef", "HHH") %>% return(., envir = .GlobalEnv)

print('hi')

}

funct(string)

但这并没有帮助:

Error in return(., envir = .GlobalEnv) : 
multi-argument returns are not permitted

最佳答案

return 在链的 RHS 上时面临一些评估问题。看这个github issue thread .

如果必须使用return,最安全的方法是使用

funct <- function(string) {
return(string %>% stringr::str_replace_all("ef", "HHH"))
print('hi')
}

funct(string)
#[1] "abcdHHHghi"

关于r - 管道到 R 函数中的 return() 时的奇怪行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59596950/

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