我正在尝试对特定数字(但不包括其自身)的赔率进行求和,例如:N = 5 那么 1+3 = 4
a<-5
sum<-function(x){
k<-0
for (n in x) {
if(n %% 2 == 1)
k<-k+1
}
return(k)
}
sum(a)
# [1] 1
Run Code Online (Sandbox Code Playgroud)
但该函数不起作用,因为它计算赔率数字而不是对它们求和。
我们可以使用矢量化方法
a1 <- head(seq_len(a), -1)
sum(a1[a1%%2 == 1])
[1] 4
Run Code Online (Sandbox Code Playgroud)
如果我们想要一个循环,也许
f1 <- function(x) {
s <- 0
k <- 1
while(k < x) {
if(k %% 2 == 1) {
s <- s + k
}
k <- k + 1
}
s
}
f1(5)
Run Code Online (Sandbox Code Playgroud)
OP代码中的问题是
for(n in x)
Run Code Online (Sandbox Code Playgroud)
其中x是单个值,因此n将被循环一次 - 即如果我们的输入是 5,那么它将仅循环一次,并且 'n' 将是 5。相反,它将是seq_len(x -1)。正确的循环是这样的
f2<-function(x){
k<- 0
for (n in seq_len(x-1)) {
if(n %% 2 == 1) {
k <- k + n
}
}
k
}
f2(5)
Run Code Online (Sandbox Code Playgroud)
注意:sum是一个base R函数。因此,最好用不同的名称来命名自定义函数