使用 tibble 创建数据框时无法引用向量

Cannot reference to a vector when creating a data frame using tibble

我想创建一个两列数据框。第一列仅包含一个字母,而第二列包含多个字母。第二列中的内容存储在一个向量中。我尝试使用 tibble 包中的 tibble 函数,但它给了我奇怪的结果。第二列与第一列相同。

library(tibble)

vec <- c("A", "B", "C")

tibble(
  vec = rep(vec[1], length(vec)),
  vec_new = vec
)
# # A tibble: 3 x 2
# vec   vec_new 
#   <chr> <chr>
# 1 A     A    
# 2 A     A    
# 3 A     A 

我尝试使用 data.table 包中的 data.framedata.table 函数创建相同的数据框。结果如预期。请告诉我为什么 tibble 会产生奇怪的结果,以及解决它的最佳方法是什么。

data.frame(
  vec = rep(vec[1], length(vec)),
  vec_new = vec
)
#   vec vec_new
# 1   A       A
# 2   A       B
# 3   A       C

library(data.table)
data.table(
  vec = rep(vec[1], length(vec)),
  vec_new = vec
)
#    vec vec_new
# 1:   A       A
# 2:   A       B
# 3:   A       C

您可以使用 'bang bang' 符号来引用您的 tibble 之外的对象,以防止 'issue' @Gregor Thomas 在您的 post.[=11= 的评论中提到]

library(tibble)
tibble(vec = rep(vec[1], length(vec)),
       vec_new = !!vec)

# A tibble: 3 x 2
  vec   vec_new
  <chr> <chr>  
1 A     A      
2 A     B      
3 A     C 

有一个.env参数可以使用

library(tibble)
tibble(
  vec = rep(vec[1], length(vec)),
   vec_new = .env$vec
 )
# A tibble: 3 × 2
  vec   vec_new
  <chr> <chr>  
1 A     A      
2 A     B      
3 A     C