我有一个返回固定长度矢量的函数。它不是这个功能,但将其视为一个玩具示例:
let data : [string:Any] = parsedData.value(key: "data")
let aatrox : [string:Any] = data["Aatrox"]
print("**id**\(aatrox["id"])")
我有一个字母foo = function(letter) {
unlist(lapply(1:10, function (number) {paste(letter,number)}))
}
的矢量,我想创建一个每列为cols = c("A", "L", "B")
的tibble:
foo(letter)
以上的tibble是用# A tibble: 10 × 3
A L B
<chr> <chr> <chr>
1 A 1 L 1 B 1
2 A 2 L 2 B 2
3 A 3 L 3 B 3
4 A 4 L 4 B 4
5 A 5 L 5 B 5
6 A 6 L 6 B 6
7 A 7 L 7 B 7
8 A 8 L 8 B 8
9 A 9 L 9 B 9
10 A 10 L 10 B 10
制作的,但我不知道如何为任意长度的data_frame("A"=foo("A"), "L"=foo("L"), "B"=foo("B"))
传递。
我确定这是基本的,可以在没有for循环的情况下完成。
在竞争框架中,我正在寻找的是
cols
答案 0 :(得分:1)
我们可以使用lapply
library(dplyr)
tbl_df(setNames(data.frame(lapply(cols, foo)), cols))
# A tibble: 10 × 3
# A L B
# <fctr> <fctr> <fctr>
#1 A 1 L 1 B 1
#2 A 2 L 2 B 2
#3 A 3 L 3 B 3
#4 A 4 L 4 B 4
#5 A 5 L 5 B 5
#6 A 6 L 6 B 6
#7 A 7 L 7 B 7
#8 A 8 L 8 B 8
#9 A 9 L 9 B 9
#10 A 10 L 10 B 10
或另一种选择是
setNames(tbl_df(matrix(foo(cols), ncol=3, byrow=TRUE)), cols)
# A tibble: 10 × 3
# A L B
# <chr> <chr> <chr>
#1 A 1 L 1 B 1
#2 A 2 L 2 B 2
#3 A 3 L 3 B 3
#4 A 4 L 4 B 4
#5 A 5 L 5 B 5
#6 A 6 L 6 B 6
#7 A 7 L 7 B 7
#8 A 8 L 8 B 8
#9 A 9 L 9 B 9
#10 A 10 L 10 B 10
注意:仅使用dplyr
。没有加载其他库
答案 1 :(得分:1)
purrr::map_df
是lapply
的一个版本,它将结果强制转换为tibble。要简化data.frame,必须命名向量,您可以使用set_names
:
library(purrr)
c("A", "L", "B") %>% set_names() %>% map_df(foo)
## # A tibble: 10 × 3
## A L B
## <chr> <chr> <chr>
## 1 A 1 L 1 B 1
## 2 A 2 L 2 B 2
## 3 A 3 L 3 B 3
## 4 A 4 L 4 B 4
## 5 A 5 L 5 B 5
## 6 A 6 L 6 B 6
## 7 A 7 L 7 B 7
## 8 A 8 L 8 B 8
## 9 A 9 L 9 B 9
## 10 A 10 L 10 B 10