apply 不会产生与替换的 for 循环相同的向量
apply does not result in the same vector like replaced for-loop
函数 "trio" 举例说明了一个具有大量计算的函数,它从数据框 (df) 中获取某些列和三个计算值:
# example: data
df <- data.frame(C1= c(1,2,3,4,5,6),C2= c(5,4,3,2,1,6),C3= c(9,1,5,2,7,4))
# example: function
trio <- function(a,b,c){
df2 <- df %>%
mutate(.,
df$C1 * a,
df$C2 * b,
df$C2 * c
)
df2$calc <- df2[3] * df2[4]/df2[5]
max(df2$calc)
}
找出哪个值组合产生最佳输出 (= max(df2$calc) 创建一个具有值组合的矩阵:
pp <- expand.grid(parameter_A = round(seq(min, max, length.out = count),3),
parameter_B = round(seq(min, max, length.out = count),3),
parameter_C = round(seq(min, max, length.out = count),3))
替换for循环
max.all<- c()
for(w in 1:nrow(pp)){
max.all[w] <- findWinZ(pp[w,1],pp[w,2],pp[w,3])
}
我打算使用 Apply-Family 的一个功能(sapply,lapply),例如
Version1: res2 <- sapply(pp, function(a,b,c) findWinZ(length(pp[,1]),length(pp[,2]),length(pp[,3])))
Version: res3 <- sapply(pp, function(a,b,c) length(findWinZ(pp[w,1],pp[w,2],pp[w,3])))
唉,apply() 循环的结果是错误的。我需要的是包含所有结果的向量,即与我从 for 循环中获得的相同输出。
拜托,任何人都可以更正我的 apply() 代码吗?非常感谢!
如果问题是如何将 for 循环重写为 sapply,如何:
res4 <- sapply(1:nrow(pp), function(w) findWinZ(pp[w,1],pp[w,2],pp[w,3]))
函数 "trio" 举例说明了一个具有大量计算的函数,它从数据框 (df) 中获取某些列和三个计算值:
# example: data
df <- data.frame(C1= c(1,2,3,4,5,6),C2= c(5,4,3,2,1,6),C3= c(9,1,5,2,7,4))
# example: function
trio <- function(a,b,c){
df2 <- df %>%
mutate(.,
df$C1 * a,
df$C2 * b,
df$C2 * c
)
df2$calc <- df2[3] * df2[4]/df2[5]
max(df2$calc)
}
找出哪个值组合产生最佳输出 (= max(df2$calc) 创建一个具有值组合的矩阵:
pp <- expand.grid(parameter_A = round(seq(min, max, length.out = count),3),
parameter_B = round(seq(min, max, length.out = count),3),
parameter_C = round(seq(min, max, length.out = count),3))
替换for循环
max.all<- c()
for(w in 1:nrow(pp)){
max.all[w] <- findWinZ(pp[w,1],pp[w,2],pp[w,3])
}
我打算使用 Apply-Family 的一个功能(sapply,lapply),例如
Version1: res2 <- sapply(pp, function(a,b,c) findWinZ(length(pp[,1]),length(pp[,2]),length(pp[,3])))
Version: res3 <- sapply(pp, function(a,b,c) length(findWinZ(pp[w,1],pp[w,2],pp[w,3])))
唉,apply() 循环的结果是错误的。我需要的是包含所有结果的向量,即与我从 for 循环中获得的相同输出。 拜托,任何人都可以更正我的 apply() 代码吗?非常感谢!
如果问题是如何将 for 循环重写为 sapply,如何:
res4 <- sapply(1:nrow(pp), function(w) findWinZ(pp[w,1],pp[w,2],pp[w,3]))