Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化R链(magrittr)_R_Data.table_Dplyr_Magrittr - Fatal编程技术网

优化R链(magrittr)

优化R链(magrittr),r,data.table,dplyr,magrittr,R,Data.table,Dplyr,Magrittr,我想通过管道(链)将magrittr对象放入循环中。我该怎么做? 我将使用虚拟操作/数据作为示例: library(data.table) library(magrittr) # Dummy data modification d <- mtcars %>% setDT() %>% .[, cylSQ := sqrt(cyl)] %>% .[, carb3 := carb^3] # Dummy loop res <- list() for(

我想通过管道(链)将magrittr对象放入循环中。我该怎么做?
我将使用虚拟操作/数据作为示例:

library(data.table)
library(magrittr)

# Dummy data modification
d <- mtcars %>%
    setDT() %>%
    .[, cylSQ := sqrt(cyl)] %>%
    .[, carb3 := carb^3]
# Dummy loop
res <- list()
for(i in unique(d$gear)) {
    res[[i]] <- d[gear == i] %>%
        .[, lm(cylSQ ~ mpg + carb3 * wt)] %>%
        .$fitted.values
}

编辑:我不想用
数据替换循环。表
dplyr
,只是好奇管道

这是一个粗略的解决方法,但是您可以在
magrittr
%$%
中使用exposition操作符

即:


这是一个粗略的解决方法,但是您可以在
magrittr
%%$%
中使用exposition操作符

即:


我不是magrittr的从业者,所以它可能会得到改进,但至少是有效的,应该是高效的

as.data.table(mtcars
              )[, cylSQ := sqrt(cyl)
                ][, carb3 := carb^3
                  ][, lm(cylSQ ~ mpg + carb3 * wt)$fitted.values, by=gear
                    ] %>% 
    split(by = "gear", keep.by = FALSE) %>% 
    lapply(unlist) %>% 
    lapply(unname) -> res


由于新的
split.data.table
它需要1.9.7中的data.table,有关如何在各种平台上安装的详细信息,请参阅。

我不是magrittr的从业者,因此它可能会得到改进,但至少是有效的

as.data.table(mtcars
              )[, cylSQ := sqrt(cyl)
                ][, carb3 := carb^3
                  ][, lm(cylSQ ~ mpg + carb3 * wt)$fitted.values, by=gear
                    ] %>% 
    split(by = "gear", keep.by = FALSE) %>% 
    lapply(unlist) %>% 
    lapply(unname) -> res


由于新的
split.data.table
需要1.9.7中的data.table,有关如何在各种平台上安装的详细信息,请参阅。

您是否介意在此处使用
dplyr
而不是
data.table
?如果没有,请尝试以下操作:

library(dplyr)
d <- mtcars %>% 
    mutate(cylSQ = sqrt(cyl), carb3 = carb^3) %>% 
    group_by(gear) %>% 
    do(fitted.values = lm(cylSQ ~ mpg + carb3 * wt, data = .)[["fitted.values"]])
库(dplyr)
d%
突变(cylSQ=sqrt(cyl),carb3=carb^3)%>%
分组依据(档位)%>%
do(fitted.values=lm(cysq~mpg+carb3*wt,数据=)[[“fitted.values”]]

您不介意使用
dplyr
而不是
数据。这里是表
?如果没有,请尝试以下操作:

library(dplyr)
d <- mtcars %>% 
    mutate(cylSQ = sqrt(cyl), carb3 = carb^3) %>% 
    group_by(gear) %>% 
    do(fitted.values = lm(cylSQ ~ mpg + carb3 * wt, data = .)[["fitted.values"]])
库(dplyr)
d%
突变(cylSQ=sqrt(cyl),carb3=carb^3)%>%
分组依据(档位)%>%
do(fitted.values=lm(cysq~mpg+carb3*wt,数据=)[[“fitted.values”]]

我可能错了,这不是出现
purr
包的原因吗?@zx8754我以前没听说过,不知道这是我要找的,但它看起来很好,值得一看。谢谢你的建议
mtcars%%>%setDT
违反了dplyr语法/不修改输入的原则,仅供参考。@Frank不
%%>%
复制吗?我试过
setDT(mtcars)
,它会像预期的那样抛出错误。我可能错了,这不是出现
purrr
包的原因吗?@zx8754我以前没有听说过,不知道它是我要找的,但它看起来很好,值得一看。谢谢你的建议
mtcars%%>%setDT
违反了dplyr语法/不修改输入的原则,仅供参考。@Frank不
%%>%
复制吗?我尝试了
setDT(mtcars)
,它抛出了错误,正如预期的那样。看起来非常好。看起来非常好。