如何通过粘贴为对象分配名称

问题描述 投票:1回答:1

考虑数据帧dat

dat <- data.frame(Loc = c("NY","MA"),
                  ID = c(1:2),
                  Sex = c("M","F")
                  )

[假装与此相关的数据更多,并且每个ID有多个观察值,我想拟合一个模型并将其保存在一个名为NYM1mod的对象中,在我看来,该对象代表“新模型”约克男号1“我可以用:paste(dat[1,1], dat[1,3], dat[1,2],"mod", sep="")输出我想要的:[1] "NYM1mod"但是我该怎么做,使输出成为新对象的名称呢?例如,为什么不能像这样将数字3分配给输出“ NYM1mod” ?:paste(dat[1,1], dat[1,3], dat[1,2],"mod", sep="") <- 3

r object functional-programming subset assign
1个回答
0
投票

如所评论,考虑使用列表而不是许多单独的对象。具体而言,在定义的函数中概括建模过程。用lapply迭代它以返回对象列表。然后用setNames重命名以返回单个可为所有索引的named对象列表。一些或一项,而不会用许多单独的对象淹没全局环境:

proc_model <- function(...) {
    # MODELING PROCESS 
    ...
    return(model)
}

model_list <- setNames(lapply(sequence_pass_as_params, proc_model),
                       paste0(dat$Loc, dat$Sex, dat$ID, "mod"))

# ALL MODELS
model_list 

# SELECT MODELS
model_list$NYM1mod    
model_list$MAF2mod

实际上,如果我理解您的需求,请考虑by(作为[[apply系列的另一个同级对象,作为tapply的面向对象包装器),以传递LocID]的子集数据帧>和Sex进入建模功能。用tryCatch包裹不存在的子集和/或产生建模错误的过程。# RECEIVE DATA FRAME AS PARAMETER proc_model <- function(df) { tryCatch({ # MODELING PROCESS model <- lm(..., data = df) }, error = function(e) return(NULL) ) } # BUILD MODEL LIST BY SUBSETS model_list <- by(dat, dat[,c("Loc", "Sex", "ID"), proc_model) # RENAME ELEMENTS IN LIST WITH UNIQUE NAMES model_list <- setNames(model_list, unique(paste0(dat$Loc, dat$Sex, dat$ID, "mod"))) # REMOVE EMPTY MODELS (I.E., ITEMS THAT RETURN NULL) model_list <- Filter(model_list, LENGTH) # ALL MODELS model_list # SELECT MODELS model_list$NYM1mod model_list$MAF2mod

© www.soinside.com 2019 - 2024. All rights reserved.