我在列表中有data.frames,通常,当我想要居中数据时,我使用循环(如下例所示).我想使用"apply"系列的一些功能,但我无法弄清楚如何编写代码.
我的数据的一个例子:
env <- list (data.frame(a=c(-1.08, -1.07, -1.07),
b=c( 4.61, 4.59, 4.59),
c=c( 3.46, 3.56, 3.52)),
data.frame(a=c( 3.93, 3.94, 3.92),
b=c(-6.69, -6.72, -6.68),
c=c( 3.04, 3.08, 3.03)))
Run Code Online (Sandbox Code Playgroud)
我将使用这些值来使它们居中:
d <- c(a=10.20, b=-10.91, c=11.89)
Run Code Online (Sandbox Code Playgroud)
我经常使用的循环类型:
for(i in 1:length(env)) {
env[[i]][, 1] <- env[[i]][, 1] - d[1]
env[[i]][, 2] <- env[[i]][, 2] - d[2]
env[[i]][, 3] <- env[[i]][, 3] - d[3]
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用"apply"系列的函数来完成我在上面循环中所做的同样的事情?
这里有两点可以简化:循环遍历列表元素并d单独减去每个值.
要替换for循环,您可以使用lapply("l",因为我们在列表上进行迭代).
# Run function for every element i in list env
lapply(env, function(i))
Run Code Online (Sandbox Code Playgroud)
要简化减法,您可以:
t(i)t(i) - dt(t(i) - d)所以最终的代码是:
lapply(env, function(i) t(t(i) - d))
Run Code Online (Sandbox Code Playgroud)