我想将多个训练和测试数据框的列表输入到我操作数据,执行回归等功能的函数中,然后将结果作为对象或数据框列表输出。
以下是玩具数据的简单编码示例:
# Create sample datasets
train1 <- data.frame(y=c(1,2,3),x=c(10,20,30))
train2 <- data.frame(y=c(2,3,4),x=c(15,25,35))
train3 <- data.frame(y=c(3,4,5),x=c(20,30,40))
test1 <- data.frame(y=c(2,3,4),x=c(15,25,35))
test2 <- data.frame(y=c(3,4,5),x=c(25,35,45))
test3 <- data.frame(y=c(4,5,6),x=c(35,45,55))
# Gather train & test datasets into list and initialize output_list
train_subset <- mget(paste0("train", 1:3), envir = .GlobalEnv)
test_subset <- mget(paste0("test", 1:3), envir = .GlobalEnv)
output_list <- setNames(lapply(1:3, function(i) list()), paste0('output_', 1:3))
f <- function(a,b,c)
{
a$log_y <- log(a$y)
trainy <- c(log(a$y))
testx <- data.matrix(b)
list_i <- list(trainy, testx)
return(output_list <<- list(c, list_i))
}
mapply(f, train_subset, test_subset, output_list, SIMPLIFY=F)
打印以下内容:
$train1
$train1[[1]]
list()
$train1[[2]]
$train1[[2]][[1]]
[1] 0.0000000 0.6931472 1.0986123
$train1[[2]][[2]]
y x
[1,] 2 15
[2,] 3 25
[3,] 4 35
$train2
$train2[[1]]
list()
$train2[[2]]
$train2[[2]][[1]]
[1] 0.6931472 1.0986123 1.3862944
$train2[[2]][[2]]
y x
[1,] 3 25
[2,] 4 35
[3,] 5 45
$train3
$train3[[1]]
list()
$train3[[2]]
$train3[[2]][[1]]
[1] 1.098612 1.386294 1.609438
$train3[[2]][[2]]
y x
[1,] 4 35
[2,] 5 45
[3,] 6 55
但是,只有{3}和trainy
用于train3和test3保存到testx
对象中 - train1,test1,train2和test2丢失了:
output_list
如何从函数返回包含所有输出向量和矩阵的列表?
由于
答案 0 :(得分:0)
经过一些试验和错误,我找到了一个简单的解决方案 - 如果有兴趣,我会在这里发帖:
f <- (function(a,b)
{
trainy <- c(log(a$y))
trainx <- data.matrix(a)
testx <- data.matrix(b)
list_i <<- list(trainy, testx)
})
fit <- mapply(f,train_subset,test_subset)
其中对象fit
是包含trainy和testx输出的2x3矩阵。