R用一行简单紧凑的方式写这篇文章?

R用一行简单紧凑的方式写这篇文章?,r,vectorization,R,Vectorization,假设我有一个叫做PAD的数据帧。 我想添加新的列。 我需要写很多这样的行,(它们会按行计算) 还是去 PAD[,"VV1","VV2","VV3"....] for(1:8中的i){ varname=paste('MV',i,sep='') PAD[,varname]有两行: cols <- split(1:24, rep(1:8, each = 3)) for (i in 1:8) PAD[[paste0("MV", i)]] <- rowMeans(PAD[, cols[[i

假设我有一个叫做PAD的数据帧。 我想添加新的列。 我需要写很多这样的行,(它们会按行计算)

还是去

 PAD[,"VV1","VV2","VV3"....]
for(1:8中的i){
varname=paste('MV',i,sep='')
PAD[,varname]有两行:

cols <- split(1:24, rep(1:8, each = 3))
for (i in 1:8) PAD[[paste0("MV", i)]] <- rowMeans(PAD[, cols[[i]]], na.rm = TRUE)

如果不使用for循环,使用常见的向量化R方法,比如apply,do.call,1:8…?@skan,
apply()
不被认为是“向量化的”。它也是一个loopOK,但at列表不是那么明确。它的长度如下所示:for(i in 1:8){PAD[,paste0('MV',i)]如果不使用for循环,使用常见的向量化R方式,例如apply、do.call、1:8…?我编辑了我的答案,使用lappy和do.call,根据您的要求。我不知道要投票的解决方案是什么,这两种解决方案都是同时提供的,都很好。
 c(PAD[,"VV1"], PAD[,"VV2"], PAD[,"VV3"], ...)
 PAD[,"VV1","VV2","VV3"....]
for (i in 1:8) {
  varname = paste('MV',i,sep='')
  PAD[,varname] <- rowMeans(PAD[, (3*n-2):(3*n)], na.rm=TRUE)
}
cols <- split(1:24, rep(1:8, each = 3))
for (i in 1:8) PAD[[paste0("MV", i)]] <- rowMeans(PAD[, cols[[i]]], na.rm = TRUE)
cols <- split(1:24, rep(1:8, each = 3))
tmp <- lapply(1:8, function(x) rowMeans(PAD[, cols[[x]]], na.rm = TRUE))
names(tmp) <- paste0("MV", 1:8)
PAD <- cbind(PAD, do.call(cbind, tmp))