我最近发现了R的future
软件包,并且已经成功使用了它。
但是,我无法将此包与套索回归的预测一起使用。
在下面的玩具示例中,我首先创建一些玩具数据,然后拟合套索回归,最后对新数据进行预测。
我两次执行此过程:一次不使用future
软件包,然后再使用future
软件包:
library(tidyverse)
library(glmnet)
set.seed(1)
a <- tibble(id = rep(letters[1:2], each = 100), x1 = rnorm(200), x2 = rnorm(200),
y = 1 + 2*x2 + rnorm(200))
newdata <- as.matrix(data.frame(x1 = rnorm(200), x2 = rnorm(200)))
pred_func <- function(z) predict(z, newx = newdata)[,1]
b1 <- a %>%
group_by(id) %>%
nest(.key = data) %>%
mutate(lasso = map(data, function(z){glmnet(x = as.matrix(select(z, x1, x2)), y = z$y,
intercept = T, alpha = 1)})) %>%
mutate(myprediction = map(lasso, pred_func))
这很好用。现在有了将来的软件包:
library(future)
plan(multiprocess)
b2 <- a %>%
group_by(id) %>%
nest(.key = data) %>%
mutate(lasso = map(data, function(z){glmnet(x = as.matrix(select(z, x1, x2)), y = z$y,
intercept = T, alpha = 1)})) %>%
mutate(myprediction_future = map(lasso, ~future(pred_func(.x)))) %>%
mutate(myprediction = values(myprediction_future))
此操作以错误终止(德语)。基本上,它告诉我不能将预测用于类elnet
,glmnet
的对象。
我首先想到,predict
包中可能有一个不同的future
函数,但事实并非如此。
由于我不太了解future
函数幕后发生的事情,因此我对此感到困惑。
编辑: 这是英文错误消息:
Error in mutate_impl(.data, dots) :
Evaluation error: no applicable method for 'predict' applied to
an object of class "c('elnet', 'glmnet')".
答案 0 :(得分:1)
predict.glmnet()
软件包中有一个glmnet
。
只需定义一个新函数。
pred_func2 <- function(z) predict.glmnet(z, newx = newdata)[,1]
然后运行。
plan(multiprocess)
b2 <- a %>%
group_by(id) %>%
nest(.key=data) %>%
mutate(lasso=map(data,
function(z) {
glmnet(x=as.matrix(select(z, x1, x2)), y=z$y,
intercept=TRUE, alpha=1)
})) %>%
mutate(myprediction_future=map(lasso, ~future(pred_func2(.x)))) %>%
mutate(myprediction=values(myprediction_future))
屈服
> b2
# A tibble: 2 x 5
id data lasso myprediction_future myprediction
<chr> <list> <list> <list> <list>
1 a <tibble [100 x 3]> <S3: elnet> <S3: MultisessionFuture> <dbl [200]>
2 b <tibble [100 x 3]> <S3: elnet> <S3: MultisessionFuture> <dbl [200]>