假设我有一个长度为10的向量
vec <- c(10,9,8,7,6,5,4,3,2,1)
,我想创建一个函数,它接受一个子集长度值(比如3),并计算到该长度的平方逆。我想计算:
10+(9/(2^2))+(8/(3^2))
也就是
vec[1]+(vec[2]/(2^2))+(vec[3]/(3^2))
,但有一个函数可以接受子集长度的输入。
我能想到的唯一解决方案是for循环,在R中有更快更优雅的解决方案吗?
是的,您可以使用R中的大多数操作都是矢量化的这一事实来完成此操作,而无需循环:
vec <- c(10,9,8,7,6,5,4,3,2,1)
cum_inverse_square <- function(vec, n) {
sum(vec[1:n] / (1:n)^2)
}
cum_inverse_square(vec, 3) == 10+(9/(2^2))+(8/(3^2)) # TRUE