R:函数在内部IF语句后停止

R:函数在内部IF语句后停止,r,function,if-statement,R,Function,If Statement,我编写了一个函数,用频率(数据帧中的值)进行一些计算,并将它们放在一个新列中。如果值为NA,则无法执行某些计算,因此我将它们更改为0。随后,因为值不能除以0,所以我希望结果是第一个频率 现在,函数在函数内部的IF语句之后停止。你们能看到它有什么问题吗,没有数据 B <- function(frame1, frame2, col){ Bframe <- merge(frame1, frame2, by = column, all = TRUE) Bframe$freq.

我编写了一个函数,用频率(数据帧中的值)进行一些计算,并将它们放在一个新列中。如果值为
NA
,则无法执行某些计算,因此我将它们更改为0。随后,因为值不能除以0,所以我希望结果是第一个频率

现在,函数在函数内部的IF语句之后停止。你们能看到它有什么问题吗,没有数据

B <- function(frame1, frame2, col){
    Bframe <- merge(frame1, frame2, by = column, all = TRUE)
    Bframe$freq.x[is.na(Bframe$freq.x)] <- 0 
    Bframe$freq.y[is.na(Bframe$freq.y)] <- 0 
    if (Bframe$freq.y == 0) { 
      Bframe$result <- Bframe$freq.x
    }
    Bframe$result <- Bframe["freq.x"] - Bframe["freq.y"]
    Bframe$percentage <- (Bframe["result"]/Bframe["freq.y"])*100
    Bframe$percABS <- abs(Bframe$percentage)
    return(Bframe)
}

B另外,使用语法突出显示作为指导,您可以看到在
Bframe[“freq.y]
中缺少了一个
。我认为更规范的副本是。MLNEBBY-问题是
如果
没有矢量化。它只关注第一个元素,而忽略其余元素。你想要
ifelse
作为
if
的矢量化版本。但是,在这种情况下,我建议OP不要使用
if
(或
ifelse
),只需使用
Bframe$result[Bframe$freq.y==0]@Gregor,请原谅我重复提问。然而,你最后的建议对我不起作用。结果仍然是
Inf
,因此,计算仍然是在零的情况下进行的。我不是最聪明的用户,所以我的代码中可能还有另一个问题,那就是什么不能按照我的意愿进行计算。我想这是有道理的。您可以除以
Bframe$freq.y
,不管它是否为0-事先更新
结果
列不会改变这一点。但是我发现很难理解没有数据你想做什么。什么是“第一频率”?如果您想添加几行示例数据来显示问题,我很乐意重新打开(5行或6行中缺少1或2个/0值就足够了!),以及该输入所需的输出。