我有一个函数,我想在矩阵的每列中返回一个不同的对象。但是,我不知道如何进行返回,以便识别在列表中创建的变量数量,因为它将以输入矩阵的列数为条件。换句话说,如何更改以下函数中的最后一个命令:
f <- function(Treat) {
for (i in c(1:ncol(Treat))) {
assign(paste0("Treat",i), as.matrix(Treat[,i]))
}
return(dat = list(Treat1=Treat1 , Treat2=Treat2, .....Treatn=Treatn))
}
答案 0 :(得分:3)
lapply
正是您要找的
f <- function(Treat){
lapply(1:ncol(Treat), function(i) as.matrix(Treat[,i]))
}
答案 1 :(得分:1)
lappy在这里工作得很好。但是你也可以使用一个显式循环(根据你的原始示例)来分配给(预先初始化的)列表:
empty_list <- list() # inititalise an empty list
f <- function(Treat, empty_list) { # set up the function
for (i in c(1:ncol(Treat))) { # set up the loop
empty_list[[i]] <- as.matrix(Treat[,i])) # write each column to a new element
}
return(empty_list) # return the list
}
然后您可以将其用于:
full_list <- f(Treat, empty_list)