我有一个带有最佳lambda的向量用于盒子cox变换。这是我的lambda矢量:
lambda <- data.frame(lambda=c(0.01,0.01,0.01))
str(lambda)
#'data.frame': 3 obs. of 1 variable:
#$ lambda: num 0.01 0.01 0.01
我也有数据:
df:
obs1 obs2 obs3
34.3 232.2 2.0
2.1 56.3 90.0
等...
然后我有一个函数来计算列的box-cox变换:
bc <- function (obs, lambda) {
(obs^lambda-1)/lambda }
我正在尝试将该函数应用于我的整个数据集:
result <- as.data.frame(lapply(df, function(u) { lapply(lambda, function(v) { bc(u,v) } ) } ))
这似乎不起作用,因为我试图在一个列上单独运行它,如下所示:
d <- bc(df[,1],0.01)
然后我做了:
z <- result[,1] == d
table(z)
导致了这个:
FALSE TRUE
3051 2
所以基本上,两列不相等。
我不确定为什么会这样。
答案 0 :(得分:2)
请考虑在此处使用mapply
,以便您可以将多个参数传递给您感兴趣的函数。一个简单的例子 - 一个需要两个值的函数,我们希望从两个不同的向量遍历每一对:
twoInputFun<-function(a,b){return(a^b)}
mapply(twoInputFun,c(1:3),c(5:7))
[1] 1 64 2187
所以对你的例子来说,
df<-data.frame(x<-rnorm(10),y<-rnorm(10))
bc <- function (obs, lambda) {(obs^lambda-1)/lambda }
mapply(bc,df,c(5,10))
[1,] -1.1110238 -0.09995922
[2,] -0.1994398 -0.01196807
[3,] 14.2708856 -0.09999996
[4,] -0.2195956 -0.09852122
[5,] -0.1996738 1.01595854
[6,] -0.2179283 -0.09999210
[7,] -0.6094362 -0.09999997
[8,] -0.1972702 -0.09999191
[9,] 0.3886741 -0.10000000
[10,] -0.2000037 25.83026050