mappler中的ifelse语句

mappler中的ifelse语句,r,if-statement,mapply,R,If Statement,Mapply,我使用mapply查找所有情况下一系列指数的总和: score = mapply(function(x, y, z) sum(df[x, y:z]), seq_len(nrow(df)), df$index, df$index+10) 如何向mapply添加ifelse语句,使其仅在df$index>5时应用函数,否则总和为0?这可能会起作用 mapply(function(x, y, z) if (y > 5) sum(df[x, y:z]) else 0, seq

我使用mapply查找所有情况下一系列指数的总和:

score = mapply(function(x, y, z) sum(df[x, y:z]), seq_len(nrow(df)), df$index, df$index+10)

如何向mapply添加ifelse语句,使其仅在df$index>5时应用函数,否则总和为0?

这可能会起作用

mapply(function(x, y, z) if (y > 5) sum(df[x, y:z]) else 0, 
         seq_len(nrow(df)), df$index, df$index+10)

或者您可以通过乘以y>5来避免if/else,这样索引>5将乘以1真,给出sumdf[x,y:z]和索引,这可能会起作用

mapply(function(x, y, z) if (y > 5) sum(df[x, y:z]) else 0, 
         seq_len(nrow(df)), df$index, df$index+10)
或者,您可以通过乘以y>5来避免if/else,这样索引>5将乘以1 TRUE,给出sumdf[x,y:z]和索引只要包装ifelse,它就可以工作了

mapply(function(x, y, z) ifelse(y > 5, sum(df[x, y:z]), 0), 
             seq_len(nrow(df)), df$index, df$index+10)
对于小于或等于5的“索引”,更好的选项是基于“索引”值将其预分配为0。应该更有效率

i1 <- df$index > 5
score[!i1] <- 0
score[i1] <- mapply(function(x, y, z) sum(df[x, y:z]),
                     seq_len(nrow(df))[i1], df$index[i1], df$index[i1] + 10)
只要把它包起来就行了

mapply(function(x, y, z) ifelse(y > 5, sum(df[x, y:z]), 0), 
             seq_len(nrow(df)), df$index, df$index+10)
对于小于或等于5的“索引”,更好的选项是基于“索引”值将其预分配为0。应该更有效率

i1 <- df$index > 5
score[!i1] <- 0
score[i1] <- mapply(function(x, y, z) sum(df[x, y:z]),
                     seq_len(nrow(df))[i1], df$index[i1], df$index[i1] + 10)

请展示一个小的可复制示例和预期输出请展示一个小的可复制示例和预期输出