在R
中,当我使用以下代码用data.frame()
命令生成表时:
nn <- 10
df <- data.frame(Completers = rep(c(1, 0), each = nn),
Gender = c(1, 0))
我得到这个结果:
Completers Gender
1 1 1
2 1 0
3 1 1
4 1 0
5 1 1
6 0 0
7 0 1
8 0 0
9 0 1
10 0 0
然而,当我尝试用tibble::tibble()
:做同样的事情时
tb <- tibble::tibble(Completers = rep(c(1, 0), each = nn),
Gender = c(1, 0))
我得到以下错误:
Error:
! Tibble columns must have compatible sizes.
• Size 10: Existing data.
• Size 2: Column `Gender`.
ℹ Only values of size one are recycled.
Run `rlang::last_error()` to see where the error occurred.
不用说,运行rlang::last_error()
对(至少对我(没有帮助。
当然,我可以简单地tb <- tibble::as_tibble(df)
,继续我的生活,但仍然。。。
因此,我的问题是:
- 为了获得与上述相同的结果,
tibble()
代码等效于data.frame()
的代码是什么
sessioninfo::session_info()
提取物:
setting value
version R version 4.2.1 (2022-06-23)
os macOS Monterey 12.6
system x86_64, darwin17.0
rstudio 2022.07.1+554 Spotted Wakerobin (desktop)
-------------------------------------------------------
package * version date (UTC) lib source
tibble 3.1.8 2022-07-22 [1] CRAN (R 4.2.0)
?tibble
文档中提到了这一点
tibble((按顺序构建列。定义列时,可以引用调用中前面创建的列。只有长度为1的列才会被回收。
> tibble::tibble(Completers = rep(c(1, 0), each = nn), Gender = 1)
# A tibble: 20 × 2
Completers Gender
<dbl> <dbl>
1 1 1
2 1 1
3 1 1
4 1 1
5 1 1
6 1 1
7 1 1
8 1 1
9 1 1
10 1 1
11 0 1
12 0 1
13 0 1
14 0 1
15 0 1
16 0 1
17 0 1
18 0 1
19 0 1
20 0 1
如果我们想获得相同的输出,请使用rep
和length.output
tibble::tibble(Completers = rep(c(1, 0), each = nn),
Gender = rep(c(1, 0), length.out = length(Completers)))
# A tibble: 20 × 2
Completers Gender
<dbl> <dbl>
1 1 1
2 1 0
3 1 1
4 1 0
5 1 1
6 1 0
7 1 1
8 1 0
9 1 1
10 1 0
11 0 1
12 0 0
13 0 1
14 0 0
15 0 1
16 0 0
17 0 1
18 0 0
19 0 1
20 0 0