在函数中,获取列表项的名称

时间:2021-03-31 05:14:07

标签: r

我正在编写一个函数来生成表格。请参阅下文。

x <- list(alpha = 1:10, 
      beta = exp(-3:3), 
      gamma = c(sin(pi/6), cos(pi/6), tan(pi/6))) 
lapply(x, function(x){
  temp <- tibble(Source = "foo",
                 Original = x,
                 Square = x ^ 2,
                 Cubic = x ^ 3)
  return(temp)
  }
)

输出如下:

enter image description here

问题是:如何让源列显示“alpha”、“beta”和“gamma”?

谢谢!

2 个答案:

答案 0 :(得分:0)

这可能不是最优雅的答案,但这是有效的。请注意,我在这里使用了 purrr::map 而不是 lapply。

x <- list(alpha = 1:10 %>% as_tibble() %>% rename("alpha" = value), 
          beta = exp(-3:3) %>% as_tibble() %>% rename("beta"= value), 
          gamma = c(sin(pi/6), cos(pi/6), tan(pi/6)) %>% as_tibble() %>% rename("gamma" = value)) 

map(x, ~ tibble(source = colnames(.), original = ., square = .^2, cubic = . ^3))


答案 1 :(得分:0)

在 base 中,您可以使用 Map :

Map(function(x, y) tibble(Source = y,Original = x,Square = x ^ 2, Cubic = x ^ 3), 
                    x, names(x))

#$alpha
# A tibble: 10 x 4
#   Source Original Square Cubic
#   <chr>     <int>  <dbl> <dbl>
# 1 alpha         1      1     1
# 2 alpha         2      4     8
# 3 alpha         3      9    27
# 4 alpha         4     16    64
# 5 alpha         5     25   125
# 6 alpha         6     36   216
# 7 alpha         7     49   343
# 8 alpha         8     64   512
# 9 alpha         9     81   729
#10 alpha        10    100  1000

#$beta
# A tibble: 7 x 4
#  Source Original    Square       Cubic
#  <chr>     <dbl>     <dbl>       <dbl>
#1 beta     0.0498   0.00248    0.000123
#2 beta     0.135    0.0183     0.00248 
#3 beta     0.368    0.135      0.0498  
#4 beta     1        1          1       
#5 beta     2.72     7.39      20.1     
#6 beta     7.39    54.6      403.      
#7 beta    20.1    403.      8103.      

#$gamma
# A tibble: 3 x 4
#  Source Original Square Cubic
#  <chr>     <dbl>  <dbl> <dbl>
#1 gamma     0.500  0.250 0.125
#2 gamma     0.866  0.75  0.650
#3 gamma     0.577  0.333 0.192

purrr 中,imap 会有所帮助。

purrr::imap(x, ~tibble(Source = .y,Original = .x,Square = .x ^ 2,Cubic = .x ^ 3))