4

我有一个 10 x 5 的数据框和一个接收 2 个输入ab.

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))
4

2 回答 2

7

如果您想将多个参数传递给“应用”函数,其中一个是列向量,另一个是常量,您可以通过两种方式进行;

apply(x, 2, fun, b=2)

或者:

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 
于 2013-08-11T19:05:21.837 回答
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
于 2013-08-11T20:50:56.000 回答