我无法将 transpose() 通过管道传输到 R 中的 lapply
I cannot pipe a transpose() into a lapply in R
标题有点复杂,但基本上我有一些我可以分两步完成的事情,不知道为什么不能通过这两个步骤。
library(data.table)
library(tidyverse)
c1 <- c("Var1 3.4 2.1","Var2 85 45", "Var3 4.5 1.6", "Var4 -8.5 6.1", "Var5 8.4 4.3",
"var6 6.5 4.3", "var7 -8.5 6.6", "var8 4.4 -8.4")
c2 <- c("Var1 3.4 2.1","Var2 85 45", "Var3 4.5 1.6", "Var4 -8.5 6.1", "Var5 8.4 4.3",
"var6 6.5 4.3", "var7 -8.5 6.6", "var8 4.4 -8.4")
MWE_List <- list(c1,c2)
MWE_List_2 <- MWE_List %>%
lapply(.,
function(x)
str_extract_all(x, "-?\b\d+\.?\d?\b") %>%
as.data.table(x) %>%
transpose(x))
产量:
Error in transpose(., x) :
fill must be a length 1 vector, such as the default NA
而不是在函数内管道而是进入下一个 lapply 确实 :
> MWE_List_2 <- MWE_List %>%
+ lapply(.,
+ function(x)
+ str_extract_all(x, "-?\b\d+\.?\d?\b") %>%
+ as.data.table(x)) %>%
+ lapply(.,function(x) transpose(x))
> MWE_List_2
[[1]]
V1 V2
1: 3.4 2.1
2: 85 45
3: 4.5 1.6
4: -8.5 6.1
5: 8.4 4.3
6: 6.5 4.3
7: -8.5 6.6
8: 4.4 -8.4
[[2]]
V1 V2
1: 3.4 2.1
2: 85 45
3: 4.5 1.6
4: -8.5 6.1
5: 8.4 4.3
6: 6.5 4.3
7: -8.5 6.6
8: 4.4 -8.4
您的示例无法重现,因为 transpose
是 data.table
和 purrr
的函数。因此,我更正了 data.table::transpose
.
但是你的实际问题与你不需要写 transpose(x)
的事实有关,因为你使用的是管道 transpose()
就足够了。
library(data.table)
library(tidyverse)
c1 <- c("Var1 3.4 2.1","Var2 85 45", "Var3 4.5 1.6", "Var4 -8.5 6.1", "Var5 8.4 4.3",
"var6 6.5 4.3", "var7 -8.5 6.6", "var8 4.4 -8.4")
c2 <- c("Var1 3.4 2.1","Var2 85 45", "Var3 4.5 1.6", "Var4 -8.5 6.1", "Var5 8.4 4.3",
"var6 6.5 4.3", "var7 -8.5 6.6", "var8 4.4 -8.4")
MWE_List <- list(c1,c2)
MWE_List2 <- MWE_List %>%
lapply(function(x)
str_extract_all(x, "-?\b\d+\.?\d?\b") %>%
as.data.table(x) %>%
data.table::transpose())
MWE_List3 <- MWE_List %>%
lapply(function(x)
str_extract_all(x, "-?\b\d+\.?\d?\b") %>%
as.data.table(x)) %>%
lapply(function(x) data.table::transpose(x))
identical(MWE_List2, MWE_List3)
#> [1] TRUE
PS:当你使用管道时,你不需要在每个函数的开头指定.,
。
标题有点复杂,但基本上我有一些我可以分两步完成的事情,不知道为什么不能通过这两个步骤。
library(data.table)
library(tidyverse)
c1 <- c("Var1 3.4 2.1","Var2 85 45", "Var3 4.5 1.6", "Var4 -8.5 6.1", "Var5 8.4 4.3",
"var6 6.5 4.3", "var7 -8.5 6.6", "var8 4.4 -8.4")
c2 <- c("Var1 3.4 2.1","Var2 85 45", "Var3 4.5 1.6", "Var4 -8.5 6.1", "Var5 8.4 4.3",
"var6 6.5 4.3", "var7 -8.5 6.6", "var8 4.4 -8.4")
MWE_List <- list(c1,c2)
MWE_List_2 <- MWE_List %>%
lapply(.,
function(x)
str_extract_all(x, "-?\b\d+\.?\d?\b") %>%
as.data.table(x) %>%
transpose(x))
产量:
Error in transpose(., x) :
fill must be a length 1 vector, such as the default NA
而不是在函数内管道而是进入下一个 lapply 确实 :
> MWE_List_2 <- MWE_List %>%
+ lapply(.,
+ function(x)
+ str_extract_all(x, "-?\b\d+\.?\d?\b") %>%
+ as.data.table(x)) %>%
+ lapply(.,function(x) transpose(x))
> MWE_List_2
[[1]]
V1 V2
1: 3.4 2.1
2: 85 45
3: 4.5 1.6
4: -8.5 6.1
5: 8.4 4.3
6: 6.5 4.3
7: -8.5 6.6
8: 4.4 -8.4
[[2]]
V1 V2
1: 3.4 2.1
2: 85 45
3: 4.5 1.6
4: -8.5 6.1
5: 8.4 4.3
6: 6.5 4.3
7: -8.5 6.6
8: 4.4 -8.4
您的示例无法重现,因为 transpose
是 data.table
和 purrr
的函数。因此,我更正了 data.table::transpose
.
但是你的实际问题与你不需要写 transpose(x)
的事实有关,因为你使用的是管道 transpose()
就足够了。
library(data.table)
library(tidyverse)
c1 <- c("Var1 3.4 2.1","Var2 85 45", "Var3 4.5 1.6", "Var4 -8.5 6.1", "Var5 8.4 4.3",
"var6 6.5 4.3", "var7 -8.5 6.6", "var8 4.4 -8.4")
c2 <- c("Var1 3.4 2.1","Var2 85 45", "Var3 4.5 1.6", "Var4 -8.5 6.1", "Var5 8.4 4.3",
"var6 6.5 4.3", "var7 -8.5 6.6", "var8 4.4 -8.4")
MWE_List <- list(c1,c2)
MWE_List2 <- MWE_List %>%
lapply(function(x)
str_extract_all(x, "-?\b\d+\.?\d?\b") %>%
as.data.table(x) %>%
data.table::transpose())
MWE_List3 <- MWE_List %>%
lapply(function(x)
str_extract_all(x, "-?\b\d+\.?\d?\b") %>%
as.data.table(x)) %>%
lapply(function(x) data.table::transpose(x))
identical(MWE_List2, MWE_List3)
#> [1] TRUE
PS:当你使用管道时,你不需要在每个函数的开头指定.,
。