我有一个这样的藏书:
uuu <- structure(list(Id = c("a", "b"),
lists = list(c(1:2), c(100:103))
),
.Names = c("Id", "lists"),
row.names = c(NA, 2L), class = c("tbl_df", "tbl", "data.frame"))
> uuu
# A tibble: 2 x 2
Id lists
* <chr> <list>
1 a <int [2]>
2 b <int [4]>
在本例中,它有2行和2列,第一列是一个字符列,名为
id
第二列叫做
lists
包含整数列表。
现在我想在列表元素上映射一个函数,例如
sqrt
功能:
res <- uuu %>% mutate(res = map(lists, sqrt))
> res
# A tibble: 2 x 3
Id lists res
<chr> <list> <list>
1 a <int [2]> <dbl [2]>
2 b <int [4]> <dbl [4]>
res
现在有了一个新列,其中包含
平方正交函数
功能。
现在我想在
物件
列,但我还希望有一个新列,指示从哪个列
身份证件
结果是。
我可以这样列出结果:
> unlist(res$res)
[1] 1.000000 1.414214 10.000000 10.049876 10.099505 10.148892
但我真正想要的是这样的东西(这里是手动操作的例子):
res2 <- data.frame(res = unlist(res$res),
ids = c(rep("a", 2), rep("b", 4)))
> res2
res ids
1 1.000000 a
2 1.414214 a
3 10.000000 b
4 10.049876 b
5 10.099505 b
6 10.148892 b
理想情况下,如果可能的话,我希望在映射部分直接传递这个,对于定义自己函数的情况,如下所示:
res <- uuu %>% mutate(res = map(lists, my_sqrt, id = id))
在哪里?
my_sqrt
是这样的:
my_sqrt <- function(x, id) return(sqrt(x), id)