在循环函数中寻址到后续对象 在循环函数中



我需要创建一个循环函数,其中我需要寻址名称以数字结尾的后续对象,即对象 1、对象 2、对象 3。所以代码应该看起来像这样:

object1 <- c(1,2,3,4,5)
object2 <- c(2,3,4,5,6)
object3 <- c(3,4,5,6,7)
for (i in 1:3) {
assign (paste0("new_object",i), mean(object???))
}

所以我需要一个相当于打字

new_object1 <- mean(object1)
new_object2 <- mean(object2)
new_object3 <- mean(object3)

提前非常感谢!

通过将"i"与"object"字符串paste来返回该对象的值是get

for (i in 1:3) {
assign(paste0("new_object",i), mean(get(paste0('object', i)))
}

但是,这不是推荐的方法,因为它会在全局环境中创建新对象。


相反,如果目的是获取所有"对象"的mean

sapply(mget(paste0("object", 1:3)), mean)

或者,如果有三个以上,请将lspattern一起使用

sapply(mget(ls(pattern = '^object\d+$')), mean)

在这里,mget返回list中多个对象的值,使用sapply遍历list,并在list元素上应用mean函数。


创建对象也可以从list完成,list2env

out <- lapply( mget(ls(pattern = '^object\d+$')), mean)
names(out) <- paste0('new_', names(out))
list2env(out, .GlobalEnv) # not recommended based on the same reason above

最新更新