0
我想將多個訓練和測試數據框的列表輸入到一個函數中,其中我操縱數據,執行迴歸等,然後將結果作爲對象或數據框的列表輸出。如何從R中的函數返回多個對象的列表?
這裏有一個簡單的編碼例玩具數據:
# 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
然而,只有trainy
和testx
爲train3和TEST3被保存到output_list
對象 - TRAIN1, test1,train2和test2丟失:
> output_list
[[1]]
list()
[[2]]
[[2]][[1]]
[1] 1.098612 1.386294 1.609438
[[2]][[2]]
y x
[1,] 4 35
[2,] 5 45
[3,] 6 55
如何返回包含函數中所有輸出向量和矩陣的列表?
感謝
你爲什麼要做'return(output_list << - list(c,list_i))'而不是僅僅返回列表? – Dason
@Dason這是我試圖迭代地將函數的三個迭代中的每一個的trainy和testx輸出編譯成一個全局列表,但顯然它不起作用。 – RobertF