我正在尝试在R中实现以下简单公式:
当间隔的限制非常大时(例如,上限的值= 10,000而不是5),我不知道如何在R中实现产品运算符
第二个公式的示例输入(实际上,区间S的维度要大得多)
S = list(c(1,0,0), c(0,1,0), c(0,0,1))
X = c(1,2,3)
任何帮助将不胜感激!
答案 0 :(得分:2)
首先,请记录日志:
i *log(1+x)
对于第二个公式:(不清楚预期的输出是什么)
ss<-matrix(unlist(S), ncol = 3, byrow = TRUE)
X<-as.matrix(X)
crossprod(crossprod(X,ss),t(X))
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 4 6
[3,] 3 6 9
答案 1 :(得分:2)
也许更紧凑:
第一个公式:
function(n, x) exp(sum(seq_len(n)*log(1+x)))
第二个公式:
function(X, S) rowSums(sapply(S, function(y) sum(X*y)*X ))
答案 2 :(得分:1)
S = list c((1,0,0), c(0,1,0), c(0,0,1))
X = c(1,2,3)
lapply( lapply(S, function(x) X %*% x %*% t(X) ) , sum)
[[1]]
[1] 6
[[2]]
[1] 12
[[3]]
[1] 18
答案 3 :(得分:1)
对于第一个公式,已经提到最好在对数刻度上执行此操作,如果x的真实值接近0,那么log1p
函数可能会有所帮助。
通常,对于这些类型的问题,您可以使用lapply
或sapply
来计算需要乘以或求和(或其他)的片段,然后使用sum
或{{ 1}}求和,相乘。如果要将值折叠/组合到没有像prod
或sum
这样的好函数的运算符,请使用prod
函数。