将元素指定给嵌套purrr映射中的列表
我试图在nest Purr::map调用中将元素分配给列表——这基本上应该与嵌套for循环相同:将元素指定给嵌套purrr映射中的列表,r,nested-loops,purrr,R,Nested Loops,Purrr,我试图在nest Purr::map调用中将元素分配给列表——这基本上应该与嵌套for循环相同: res <- list() for (i in 1:4) { for (j in letters[1:3]) { res[[paste(i,j)]] <- paste(i,j) } } str(res) #> List of 12 #> $ 1 a: chr "1 a" #> $ 1 b: chr "1 b" #> $ 1 c: chr "
res <- list()
for (i in 1:4) {
for (j in letters[1:3]) {
res[[paste(i,j)]] <- paste(i,j)
}
}
str(res)
#> List of 12
#> $ 1 a: chr "1 a"
#> $ 1 b: chr "1 b"
#> $ 1 c: chr "1 c"
#> $ 2 a: chr "2 a"
#> $ 2 b: chr "2 b"
#> $ 2 c: chr "2 c"
#> $ 3 a: chr "3 a"
#> $ 3 b: chr "3 b"
#> $ 3 c: chr "3 c"
#> $ 4 a: chr "4 a"
#> $ 4 b: chr "4 b"
#> $ 4 c: chr "4 c"
使用
walk
运行相同的代码将返回相同的空res\u purr
对象。使用您的代码,我们可以简单地添加res\u purr使用您的代码,我们可以简单地添加res\u purr我将执行以下操作:
library(purrr)
res_purrr <- expand.grid(1:4,letters[1:3],stringsAsFactors = FALSE) %>%
pmap(paste) %>%
set_names()
str(res_purrr)
# List of 12
# $ 1 a: chr "1 a"
# $ 2 a: chr "2 a"
# $ 3 a: chr "3 a"
# $ 4 a: chr "4 a"
# $ 1 b: chr "1 b"
# $ 2 b: chr "2 b"
# $ 3 b: chr "3 b"
# $ 4 b: chr "4 b"
# $ 1 c: chr "1 c"
# $ 2 c: chr "2 c"
# $ 3 c: chr "3 c"
# $ 4 c: chr "4 c"
库(purrr)
res_purrr%
pmap(粘贴)%>%
set_names()
str(res_purrr)
#12人名单
#$1 a:chr“1 a”
#$2 a:chr“2 a”
#$3 a:chr“3 a”
#$4 a:chr“4 a”
#100亿美元:chr“100亿”
#200亿美元:chr“200亿”
#300亿美元:chr“300亿”
#400亿美元:chr“400亿”
#$1 c:chr“1 c”
#$2 c:chr“2 c”
#$3 c:chr“3 c”
#$4 c:chr“4 c”
这个问题是相关的:我会做以下事情:
library(purrr)
res_purrr <- expand.grid(1:4,letters[1:3],stringsAsFactors = FALSE) %>%
pmap(paste) %>%
set_names()
str(res_purrr)
# List of 12
# $ 1 a: chr "1 a"
# $ 2 a: chr "2 a"
# $ 3 a: chr "3 a"
# $ 4 a: chr "4 a"
# $ 1 b: chr "1 b"
# $ 2 b: chr "2 b"
# $ 3 b: chr "3 b"
# $ 4 b: chr "4 b"
# $ 1 c: chr "1 c"
# $ 2 c: chr "2 c"
# $ 3 c: chr "3 c"
# $ 4 c: chr "4 c"
库(purrr)
res_purrr%
pmap(粘贴)%>%
set_names()
str(res_purrr)
#12人名单
#$1 a:chr“1 a”
#$2 a:chr“2 a”
#$3 a:chr“3 a”
#$4 a:chr“4 a”
#100亿美元:chr“100亿”
#200亿美元:chr“200亿”
#300亿美元:chr“300亿”
#400亿美元:chr“400亿”
#$1 c:chr“1 c”
#$2 c:chr“2 c”
#$3 c:chr“3 c”
#$4 c:chr“4 c”
这个问题是相关的:您需要将结果分配回res\u purr
以替换它。如果你想更新res\u purr
,你可以使用其他人已经正确指出分配结果失败的地方,但更广泛地说,你在函数编程工具上使用for
循环逻辑,这在很多情况下不会给你想要的结果。例如,您实际上并没有获得所需的列表元素名称。您不会使用像map
这样的工具来指定“循环”中的外部对象。另外,您得到的是一个嵌套列表,而不是一个12人的列表。@avid_useR我正在尝试完成与原始海报相同的任务。您能否澄清如何将结果分配回原始列表(res_purrr),而不是使用不推荐的@user42485。接受的答案将是OP问题的解决方案。如果它没有回答您的问题,我会搜索它或问您自己的问题(确保没有人问过)。您需要将结果分配回res\u purr
以替换它。如果你想更新res\u purr
,你可以使用其他人已经正确指出分配结果失败的地方,但更广泛地说,你在函数编程工具上使用for
循环逻辑,这在很多情况下不会给你想要的结果。例如,您实际上并没有获得所需的列表元素名称。您不会使用像map
这样的工具来指定“循环”中的外部对象。另外,您得到的是一个嵌套列表,而不是一个12人的列表。@avid_useR我正在尝试完成与原始海报相同的任务。您能否澄清如何将结果分配回原始列表(res_purrr),而不是使用不推荐的@user42485。接受的答案将是OP问题的解决方案。如果它没有回答你的问题,我会搜索它或者问你自己的问题(确保没有人问过)。这是不一样的output@Moody_Mudskipper与res
不同,对吗?我想问题是结果没有被存储。是的,据我所知,OP想要没有用于loopsit的res,这是不一样的output@Moody_Mudskipper与res
不同,对吗?我想问题是结果没有被存储。是的,据我所知,OP想要res而不是loopsI,就像这样——奇怪的是,如果函数(paste
)和/或赋值更复杂,你能想到任何最重要的潜在缺点吗?你可以使用公式符号,这样行就可以变成pmap(~paste>)(sqrt(…1),“foo”,toupper(…2))
或任何函数代替粘贴谢谢。我可以发布另一个问题,但您可能更容易修改这个答案——如果我们使用pmap(~paste(sqrt(…1),“foo”,toupper(…2)))
,是否有可能让设置\u名称
引用回原始网格?也就是说,第一个结果的名称将是1 a
而不是1 foo a
。一切都是可能的,我明天将编辑我的答案:)我喜欢这样——好奇,如果函数(粘贴
),你能想到任何最重要的潜在缺点吗和/或赋值更复杂?您可以使用公式表示法,这样行可以变成pmap(~paste(sqrt(…1),“foo”,toupper(…2))
或任何函数而不是paste。我可以发布另一个问题,但对你来说修改这个答案可能更容易——如果我们使用pmap(~paste(sqrt(..1),“foo”,toupper(..2))
,是否可以让设置名称
引用回原始网格?也就是说,第一个结果的名称将是1a
而不是1fooa
。一切都有可能,我明天将编辑我的答案:)
x <- do.call(paste, expand.grid(1:3, letters[1:4], stringsAsFactors = FALSE))
res <- setNames(as.list(x), x)
str(res)
# List of 12
# $ 1 a: chr "1 a"
# $ 2 a: chr "2 a"
# ...
x <- do.call(function (Var1,Var2) paste(sqrt(Var1),toupper(Var2)),
expand.grid(1:4, letters[1:3], stringsAsFactors = FALSE))
res <- setNames(as.list(x), x)
str(res)
# List of 12
# $ 1 A : chr "1 A"
# $ 1.4142135623731 A : chr "1.4142135623731 A"
# $ 1.73205080756888 A: chr "1.73205080756888 A"
# $ 2 A : chr "2 A"
# ...
library(purrr)
res_purrr <- expand.grid(1:4,letters[1:3],stringsAsFactors = FALSE) %>%
pmap(paste) %>%
set_names()
str(res_purrr)
# List of 12
# $ 1 a: chr "1 a"
# $ 2 a: chr "2 a"
# $ 3 a: chr "3 a"
# $ 4 a: chr "4 a"
# $ 1 b: chr "1 b"
# $ 2 b: chr "2 b"
# $ 3 b: chr "3 b"
# $ 4 b: chr "4 b"
# $ 1 c: chr "1 c"
# $ 2 c: chr "2 c"
# $ 3 c: chr "3 c"
# $ 4 c: chr "4 c"