问题

我想将函数element-isse应用于数据帧列表.我能够应用一个简单的函数,但不是更复杂的函数,因为我不确定如何引用参数.

我能够在数据框架上执行以下操作:

 df1 <- data.frame(
  A = c(1, 2),
  B = c(1, 3)
)
centered <- apply(df1, 2, function(x) x - mean(x)) 
scaled <- apply(centered, 2, function(x) x/sqrt(sd(x)))
 

然后我创建了两个数据帧的列表(它们的行数相同,但列数不同):

 df1 <- data.frame(
      A = c(1, 2),
      B = c(1, 3))
 df2 <- data.frame(
      A = c(1, 2, 3, 4),
      B = c(1, 2, 3, 4))
 l=list(df1,df2)
 

我已经知道mapply似乎做我想要的事情.但是,如何从上面应用操作?这是mapply for function(x,y).我想从上面应用操作centeredscaled:

 l_output <- mapply(function(x,y) x*y, x = 2, y = list, SIMPLIFY = FALSE)
 

  最佳答案

使用lapply应用相同的函数.这既适用于中心函数,也适用于缩放函数.

 lapply(l, function(y) apply(y, 2, function(x) {
        x = x - mean(x)
        x/sqrt(sd(x))
}))

#[[1]]
#              A          B
#[1,] -0.5946036 -0.8408964
#[2,]  0.5946036  0.8408964

#[[2]]
#              A          B
#[1,] -1.3201676 -1.3201676
#[2,] -0.4400559 -0.4400559
#[3,]  0.4400559  0.4400559
#[4,]  1.3201676  1.3201676
 

如果你单独想要他们

 centered <- lapply(l, function(y) apply(y, 2, function(x) x - mean(x)))
scaled <- lapply(centered, function(y) apply(y, 2, function(x) x/sqrt(sd(x))))
 

  相同标签的其他问题

rlistfunction