我在此页面中的新内容。 我一直在使用这段代码但没有成功。
我有一个参数列表。
price<-seq(10,100,length=10)
alfa<-seq(2,3,length=4)
beta<-seq(0.1,0.2,length=4)
列表是:
[[1]]
[1] 10 20 30 40 50 60 70 80 90 100
[[2]]
[1] 2.000000 2.333333 2.666667 3.000000
[[3]]
[1] 0.1000000 0.1333333 0.1666667 0.2000000
我想要的是创建一个函数,对于每个价格,执行以下操作。我试着用lapply函数没有结果。
price*beta[1]+alfa[1]
price*beta[2]+alfa[2]
price*beta[3]+alfa[3]
price*beta[4]+alfa[4]
谢谢!
答案 0 :(得分:0)
您通常可以在lapply()函数之外编写函数,如下所示:
price<-seq(10,100,length=10)
alfa<-seq(2,3,length=4)
beta<-seq(0.1,0.2,length=4)
f <- function(price) c(price*beta[1]+alfa[1], price*beta[2]+alfa[2], price*beta[3]+alfa[3], price*beta[4]+alfa[4])
lapply(price, f)
这有用吗?
答案 1 :(得分:0)
请提供您的lapply代码..
这里还有一种方法可以..代码是
pr <- function(){
new_val <- 0
new_val <- price*alfa+beta
return(new_val)
}
如果你想要,你可以使用它。
答案 2 :(得分:0)
更自然的函数是Mapply
,它接受向量参数并按位置将函数应用于元素。
mapply(function(x, y, price) (price * y) + x, alfa, beta,
MoreArgs=list("price"=price), SIMPLIFY=FALSE)
[[1]]
[1] 3 4 5 6 7 8 9 10 11 12
[[2]]
[1] 3.666667 5.000000 6.333333 7.666667 9.000000 10.333333 11.666667 13.000000 14.333333 15.666667
[[3]]
[1] 4.333333 6.000000 7.666667 9.333333 11.000000 12.666667 14.333333 16.000000 17.666667 19.333333
[[4]]
[1] 5 7 9 11 13 15 17 19 21 23
这里,MoreArgs参数用于将通用函数价格作为向量而不是逐元素地提供。您还可以使用mapply
,Map
的包装器,它总是返回一个列表。这消除了对SIMPLIFY
参数的需求:
Map(function(x, y, price) (price * y) + x, alfa, beta, MoreArgs=list(price=price))
[[1]]
[1] 3 4 5 6 7 8 9 10 11 12
[[2]]
[1] 3.666667 5.000000 6.333333 7.666667 9.000000 10.333333 11.666667 13.000000 14.333333 15.666667
[[3]]
[1] 4.333333 6.000000 7.666667 9.333333 11.000000 12.666667 14.333333 16.000000 17.666667 19.333333
[[4]]
[1] 5 7 9 11 13 15 17 19 21 23