我想建立这个函数:f(a,b)= sum_ {i = 1到n}(max(a-b_i,0))其中b =(b_1,b_2,... b_n)。这就是我所做的:
vec<-function(a,b){
z<-0
for(i in b){
ifelse(a > i,z <- z + (a-i), 0)
}
return(data.frame(z))
}
此代码为a的标量输入提供正确的输出。但使用矢量输出答案并不总是正确的。例如
> vec(c(-6,5),c(3,1,3))
gives -25 for a=-6 and 8 for a=5 respectively.
But > vec(-6,c(3,1,3)) gives 0. And this the correct answer.
请抛出一些想法我将如何纠正它。
答案 0 :(得分:0)
当您a = c(-6,5)
时,此参数a > i
变为(FALSE, TRUE)
。由于它包含true,因此向量将传递到z <- z + (a-i)
。请注意,如果您在此公式中使用a=-6
,则会获得-25
的输出。我建议做这样的事情:
vec<-function(a,b){
z<-0
for(i in b){
p <- ifelse(a > i,z <- z + (a-i), 0)
}
return(data.frame(p))
}
答案 1 :(得分:0)
我相信你错过的只是总结正数的条件,正如条件&#39; max(a-b_i,0)&#39;所表示。
此代码适用于您提供的示例:
vec <- function(a, b){
n <- NULL
for(i in 1:length(a)){
z <- a[i] - b
z <- z[z > 0]
n <- c(n, sum(z))
}
return(n)
}
例如:
> vec(c(-6, 5), c(3, 1, 3))
[1] 0 8
和
> vec(-6, c(3, 1, 3))
[1] 0
如果您想获取data.frame,只需将return(n)
指令替换为return(data.frame(n))
。