我有一个10 x 5数据框和一个接收2个输入a
和b
的函数。
a
是一个向量,b
是一个整数。
函数fun
计算向量a
的平均值,并将其乘以b
并返回结果。在下面的代码中,我尝试将apply()
此函数添加到x
的每一列,但它似乎不起作用。求救!
x = data.frame(rnorm(10), rnorm(10), rnorm(10), rnorm(10), rnorm(10))
fun = function(a, b)
{
c = mean(a) * b
return(c)
}
apply(x, 2, fun(x,2))
答案 0 :(得分:6)
如果要将多个参数传递给“apply”-ied函数,其中一个是列向量而另一个是常量,则可以通过两种方式完成;
apply(x, 2, fun, b=2)
OR:
apply(x, 2, function(x) {fun(x, 2)} )
R的可能看似奇怪的行为是表达式fun(x,2)
不是函数而function(x) {fun(x, 2)}
是。
apply(x, 2, fun, b=2)
#------------------
rnorm.10. rnorm.10..1 rnorm.10..2 rnorm.10..3 rnorm.10..4
-0.06806881 0.32749640 -0.14400234 -0.41493410 -0.02669955
答案 1 :(得分:3)
这里问题很简单,因为你有b的常数值。但是,如果您有两个或两个以上的输入,则可以将它们用作列表,然后使用Map
函数。以你的例子:
set.seed(1)
mydata<-data.frame(rnorm(10), rnorm(10), rnorm(10), rnorm(10), rnorm(10))
a<-as.list(names(mydata))
b<-as.list(rep(2,5)) # you can keep b<-2 it doesn't change the results since b is constant
myout<-Map(function(x,y) y*mean(mydata[,x]),a,b)
>myout
[[1]]
[1] 0.2644056
[[2]]
[1] 0.4976899
[[3]]
[1] -0.2673465
[[4]]
[1] 0.2414604
[[5]]
[1] 0.2682734