gpt4 book ai didi

r - 忽略 R 函数中的错误 - try() 函数不起作用

转载 作者:行者123 更新时间:2023-12-03 08:46:01 24 4
gpt4 key购买 nike

我有一个带有各种 UTM 源/媒体的 DataFrame,我想对其进行分段,例如,对于 UTM_source = 123 和 UTM_medium = ABC/BCD 的行,我想指定名称“123ABC”。我有超过 50 行这样的行,其中包含各种来源和媒体的许多组合,所有其他组合都以“其他”结尾。

问题是,当我想将值分配给不存在的组合时,会发生错误并破坏函数。为了使代码工作,我必须手动检查所有 50 多种组合,然后运行其余代码。

segment_my_DF <- function(DF) {

DF$segment <- NA

# segment based on source and medium

DF[!is.na(DF$UTMSource__c) & !is.na(DF$UTMMedium__c) &
DF$UTMSource__c =="123" & DF$UTMMedium__c =="ABC", ]$segment =
"123ABC"
DF[!is.na(DF$UTMSource__c) & !is.na(DF$UTMMedium__c) &
DF$UTMSource__c =="123" & DF$UTMMedium__c =="BCD", ]$segment =
"123ABC"
DF[!is.na(DF$UTMSource__c) & !is.na(DF$UTMMedium__c) &
DF$UTMSource__c =="234" & DF$UTMMedium__c =="ABC",
]$segment = "234ABC"
...
# pack all the others
DF[is.na(DF$segment), ]$segment = "OTHERS"

return(DF)
}

假设我拥有的 DataFrame 没有 UTM_Source = '123' 和 UTM_Medium = 'ABC' 的任何行。我收到的错误信息是:
Error in `$<-.data.frame`(`*tmp*`, "segment", value = "B2B") : 
replacement has 1 row, data has 0

我希望这个函数能走得更远,就像一个“if”语句。我尝试在函数内使用 try() (都带有 () 和 {} 括号):
segment_my_DF <- function(DF) {

DF$segment <- NA

# segment based on source and medium

try(
...
)

# pack all the others
DF[is.na(DF$segment), ]$segment = "OTHERS"

return(DF)
}

它使函数立即崩溃。我在调用函数时尝试使用 try() (都带有 () 和 {} 括号):
segmented_Marketing <- try({segment_my_DF(Rest)})

它也不起作用。我应该如何处理这个问题?我想到的一件事是将所有这 50 多个条件包装在 50 多个“if”语句中,但必须有一种更简单的方法。

最佳答案

我会写一个简单的函数来做到这一点。例如,

setIfAny <- function(condition, value) {
if (any(condition))
DF[condition, "segment"] <<- value
}

因为我用了 <<-超赋值运算符,赋值发生在函数之外,你可以做类似的事情
setIfAny(!is.na(DF$UTMSource__c) & !is.na(DF$UTMMedium__c) & 
DF$UTMSource__c =="123" & DF$UTMMedium__c =="ABC",
"123ABC")

如果你想避免超赋值,你可以通过 DF进入函数并在最后返回它:
modifyIfAny <- function(data, condition, value) {
if (any(condition))
data[condition, "segment"] <- value
data
}

您将用作
DF <- modifyIfAny(DF, 
!is.na(DF$UTMSource__c) & !is.na(DF$UTMMedium__c) & DF$UTMSource__c =="123" & DF$UTMMedium__c =="ABC",
"123ABC")

关于r - 忽略 R 函数中的错误 - try() 函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54078027/

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