替换R中的外部和行和
给定三个输入向量替换R中的外部和行和,r,R,给定三个输入向量v,a,m,以及以下函数: f1 <- function(v, m, a) { o = outer(m, v, ">") rowSums(t(t(o) * a )) } 但不是为了: w = c(0.07, 0.21, 0.30, 0.62, 1.63) f1(w, m, a) # [1] 0.00 11.41 11.41 11.41 20.81 27.92 27.92 30.72 30.72 f2(w, m,
v
,a
,m
,以及以下函数:
f1 <- function(v, m, a) {
o = outer(m, v, ">")
rowSums(t(t(o) * a ))
}
但不是为了:
w = c(0.07, 0.21, 0.30, 0.62, 1.63)
f1(w, m, a)
# [1] 0.00 11.41 11.41 11.41 20.81 27.92 27.92 30.72 30.72
f2(w, m, a)
# [1] 11.41 11.41 11.41 20.81 27.92 27.92 30.72 30.72
你能帮我修正一下f2,这样它对两组输入都能给出与f1相同的结果吗
f1 <- function(w, m, a) {
o <- outer(m, w, ">")
rowSums(t(t(o) * a ))
}
f2 <- function(w, m, a) {
wm <- c(m, w)
index <- c(rep(0, length(m)), rep(1, length(w)))
index2 <- index[order(wm)]
cumsum2 <- cumsum(index2)
r1 <- cumsum2[index2 == 0]
cumsum(c(0, a))[r1 + 1]
}
v <- c(0, 0.11, 0.17, 0.31, 0.63)
w <- c(0.07, 0.21, 0.30, 0.62, 1.63)
a <- c(11.41, 9.40, 7.11, 2.80, 0.27)
m <- c(0.03, 0.097, 0.14, 0.19, 0.26, 0.31, 0.46, 0.63, 1.13)
identical(f1(v, m, a), f2(v, m, a))
# [1] TRUE
identical(f1(w, m, a), f2(w, m, a))
# [1] TRUE
f1请描述您试图使用outer
和rowSums
执行的操作。否则很难知道如何更换。谢谢你的帮助。
w = c(0.07, 0.21, 0.30, 0.62, 1.63)
f1(w, m, a)
# [1] 0.00 11.41 11.41 11.41 20.81 27.92 27.92 30.72 30.72
f2(w, m, a)
# [1] 11.41 11.41 11.41 20.81 27.92 27.92 30.72 30.72
f1 <- function(w, m, a) {
o <- outer(m, w, ">")
rowSums(t(t(o) * a ))
}
f2 <- function(w, m, a) {
wm <- c(m, w)
index <- c(rep(0, length(m)), rep(1, length(w)))
index2 <- index[order(wm)]
cumsum2 <- cumsum(index2)
r1 <- cumsum2[index2 == 0]
cumsum(c(0, a))[r1 + 1]
}
v <- c(0, 0.11, 0.17, 0.31, 0.63)
w <- c(0.07, 0.21, 0.30, 0.62, 1.63)
a <- c(11.41, 9.40, 7.11, 2.80, 0.27)
m <- c(0.03, 0.097, 0.14, 0.19, 0.26, 0.31, 0.46, 0.63, 1.13)
identical(f1(v, m, a), f2(v, m, a))
# [1] TRUE
identical(f1(w, m, a), f2(w, m, a))
# [1] TRUE