Home > Software engineering >  Cannot reference to a vector when creating a data frame using tibble
Cannot reference to a vector when creating a data frame using tibble

Time:11-21

I would like to create a two-column data frame. The first column contains only one letter, while the second column contains several letters. The content in the second column is stored in a vector. I tried to use the tibble function from the tibble package, but it gave me strange results. The second column is the same as the first column.

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 

I tried to create the same data frame with the data.frame and data.table functions from the data.table package. The result is as expected. Please let me know why tibble generates strange results and what is the best way to fix it.

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

CodePudding user response:

You could use the 'bang bang' notation to refer to objects outside of your tibble to prevent the 'issue' @Gregor Thomas mentioned in the comment of your post.

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 

CodePudding user response:

There is a .env argument which can be used

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      
  • Related