mapply r 中的 ifelse 语句
ifelse statement in mapply r
我正在使用 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
,因此 index > 5
将乘以 1 (TRUE
) 得到 sum(df[x, y:z])
和 index <= 5
将乘以 0 (FALSE
) 得到 0.
mapply(function(x, y, z) sum(df[x, y:z]) * (y > 5),
seq_len(nrow(df)), df$index, df$index+10)
只需包装 ifelse
就可以了
mapply(function(x, y, z) ifelse(y > 5, sum(df[x, y:z]), 0),
seq_len(nrow(df)), df$index, df$index+10)
一个更好的选择是 pre-assign 基于 'index' 值将小于或等于 5 的那些 'index' 设为 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 查找所有情况下一系列索引的总和:
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
,因此 index > 5
将乘以 1 (TRUE
) 得到 sum(df[x, y:z])
和 index <= 5
将乘以 0 (FALSE
) 得到 0.
mapply(function(x, y, z) sum(df[x, y:z]) * (y > 5),
seq_len(nrow(df)), df$index, df$index+10)
只需包装 ifelse
就可以了
mapply(function(x, y, z) ifelse(y > 5, sum(df[x, y:z]), 0),
seq_len(nrow(df)), df$index, df$index+10)
一个更好的选择是 pre-assign 基于 'index' 值将小于或等于 5 的那些 'index' 设为 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)