gpt4 book ai didi

r - 如何在 if 语句(使用来自其他向量的条目)之后通过多次计算在向量上使用 ifelse

转载 作者:行者123 更新时间:2023-12-01 13:14:54 24 4
gpt4 key购买 nike

我在一个函数中有几个向量,它们的长度都相同 (2000)。我想用 if 语句检查一个向量中是否满足某些条件,然后代码应该对来自同一行的其他向量的条目进行多次计算。到目前为止,我无法用普通的 if 语句或 ifelse 函数解决它。它可以用一个循环来解决,但由于我有 2000 个观察结果,这会导致代码运行时间很长——我想避免这种情况。我的代码如下所示:

function1 = function(vec1,vec3,vec4,vec5){

ifelse(vec5 < 20,
# Calculations follow which should be executed when the statement is true
# The row used for vec1 and vec3 should be the same as the row which got
# checked for vec5
a <- vec1 * 2 * vec3
b <- vec1 * 4
c <- cbind(a,b)
d<- apply(c, 1, FUN=min),

# Now should be the calculations if the if-statement is false
# Again, the row used for vec1, vec3 and vec 4 should be the same as the row
# which got checked for vec5
a <- vec1 * 2 * vec3
b <- vec1 * 4
c <- cbind(a,b)
d1<- apply(c, 1, FUN=min)
a2 <- vec1 * 1.5 * vec4
b2 <- vec1 * 4
c2 <- cbind(a2,b2)
d2<- apply(c2, 1, FUN=min)
d = d1 + d2) # end of ifelse

return(d)
}

# For convenience lets just assume the vectors are of length 3
vec1 <- c(100,150,120)
vec3 <- c(12,20,28)
vec4 <- c(42,48,43)
vec5 <- c(18,17,25)

d <- function1(vec1,vec3,vec4,vec5)

# d should be a vector of length 3 as well with outcome 400,600,960 if I calculated correctly by hand

此代码无法运行,因为 R 似乎只期望 vec5<20 之后的一行代码,而不是所有不同的计算。我怎么解决这个问题?感谢您的帮助!

最佳答案

如果我没理解错的话,你的函数可以简化为

function1 <- function(vec1,vec3,vec4,vec5){
ifelse(vec5 < 20, pmin(vec1 * 2 * vec3, vec1 * 4),
pmin(vec1 * 2 * vec3, vec1 * 4) + pmin(vec1 * 1.5 * vec4,vec1 * 4))
}

function1(vec1, vec3, vec4, vec5)
#[1] 400 600 960

或者更好的是避免重复计算和ifelse

function1 <- function(vec1,vec3,vec4,vec5){
pmin(vec1 * 2 * vec3, vec1 * 4) +
(pmin(vec1 * 1.5 * vec4,vec1 * 4)*(vec5 >= 20))
}

function1(vec1, vec3, vec4, vec5)
#[1] 400 600 960

关于r - 如何在 if 语句(使用来自其他向量的条目)之后通过多次计算在向量上使用 ifelse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56035398/

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