传递R中函数中的参数列表

时间:2017-02-28 14:11:18

标签: r

我在此页面中的新内容。 我一直在使用这段代码但没有成功。

我有一个参数列表。

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]

谢谢!

3 个答案:

答案 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参数用于将通用函数价格作为向量而不是逐元素地提供。您还可以使用mapplyMap的包装器,它总是返回一个列表。这消除了对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