我有一个包含两个变量的数据集:
df<- data.frame(var1= rnorm(20, 15, 1.5), var2= rnorm(20, 7.5, 1))我有一个函数可以用来对它们进行规范化:
normFunc<- function(x){
xAvg<- mean(x)
return(x/xAvg)
}手动运行该函数运行良好,请参阅var1上的以下内容
df$var1AVG<- normFunc(df$var1)

我想做的是将这两个变量动态地传递给函数,使用for循环,将它们赋值给数据帧,并动态命名它们。
发布于 2018-12-13 06:47:26
您可以使用colMeans/colMeans2以矢量化的方式完成此操作
df / colMeans(df)
# or
df / matrixStats::colMeans2(as.matrix(df))
# yields
var1 var2
1 0.9307705 0.4228236
2 1.9674104 0.9776180
3 1.1397295 0.4255726
4 2.0279614 0.9090271
5 0.9987836 0.4519303
...有了数据
set.seed(123)
df <- data.frame(var1= rnorm(20, 15, 1.5), var2= rnorm(20, 7.5, 1))附录
要回答您的问题:
或者,在这种情况下,Vectorize方法或apply系列( vapply是目前为止最有效的)值得一试--在您的情况下,vapply(1:ncol(df), function (n) normFunc(df[,n]), numeric(nrow(df)))可以工作。或者,一个构造良好的循环有时甚至可以更快。
https://stackoverflow.com/questions/53752461
复制相似问题