R 如何使用管道设置变量的类?

R 如何使用管道设置变量的类?,r,class,tidyverse,tibble,openxlsx,R,Class,Tidyverse,Tibble,Openxlsx,我创建了一个函数,该函数通过几个基本输入构建一个TIBLE library(tidyverse) 我试过了 fun <- function(x, y) { tibble( start = x) %>% mutate(k = x * y) %>% class(k) <- "currency" } fun% 突变(k=x*y)%>% 类别(k)货币类别从哪里来?我能找到的最接近的是formattable::currency(即使返回class“form

我创建了一个函数,该函数通过几个基本输入构建一个TIBLE

library(tidyverse)
我试过了

fun <- function(x, y) {
  tibble(
    start = x) %>%
  mutate(k = x * y) %>%
  class(k) <- "currency"
}
fun%
突变(k=x*y)%>%
类别(k)货币类别从哪里来?我能找到的最接近的是
formattable::currency
(即使返回class
“formattable”“numeric”
)。在这种情况下,您可以执行以下操作:

library(dplyr)

fun <- function(x, y) {

  tibble(start = x) %>%
    mutate(k = x * y) %>%
    mutate_at(vars(start, k), formattable::currency)
}

fun(1:10, 2)
# A tibble: 10 x 2
#   start      k         
#   <formttbl> <formttbl>
# 1 $1.00      $2.00     
# 2 $2.00      $4.00     
# 3 $3.00      $6.00     
# 4 $4.00      $8.00     
# 5 $5.00      $10.00    
# 6 $6.00      $12.00    
# 7 $7.00      $14.00    
# 8 $8.00      $16.00    
# 9 $9.00      $18.00    
#10 $10.00     $20.00    

编辑

fun <- function(x, y) {

  data <- tibble(start = x) %>% mutate(k = x * y)
  data[c('k', 'start')] <- lapply(data[c('k', 'start')], 
                             function(x) {class(x) <- "Currency";x})
   return(data)
}

str(fun(1:10, 2))
#Classes ‘tbl_df’, ‘tbl’ and 'data.frame':  10 obs. of  2 variables:
# $ start: 'Currency' int  1 2 3 4 5 6 7 8 9 10
# $ k    : 'Currency' num  2 4 6 8 10 12 14 16 18 20

fun“currency”类来自
openxlsx
package我尝试添加:
mutate_at(vars(start,k),openxlsx::currency)
但是它说“Error:'currency'不是从'namespace:openxlsx'导出的对象”。是否有其他方法为数据帧中的多个对象设置类<代码>类(vars(df$start,k))谢谢Ronak。我已经习惯了整理衣服,忘记了使用旧的学校技能。非常感谢您的帮助。如果您想留在
tidyverse
,您可以将
lappy
更改为
map
,这同样有效。
library(dplyr)

fun <- function(x, y) {

  tibble(start = x) %>%
    mutate(k = x * y) %>%
    mutate_at(vars(start, k), formattable::currency)
}

fun(1:10, 2)
# A tibble: 10 x 2
#   start      k         
#   <formttbl> <formttbl>
# 1 $1.00      $2.00     
# 2 $2.00      $4.00     
# 3 $3.00      $6.00     
# 4 $4.00      $8.00     
# 5 $5.00      $10.00    
# 6 $6.00      $12.00    
# 7 $7.00      $14.00    
# 8 $8.00      $16.00    
# 9 $9.00      $18.00    
#10 $10.00     $20.00    
fun <- function(x, y) {
   tibble(start = x) %>%
     mutate(k = x * y) %>%
     mutate_at(vars(start, k), as.character)
}
fun <- function(x, y) {

  data <- tibble(start = x) %>% mutate(k = x * y)
  data[c('k', 'start')] <- lapply(data[c('k', 'start')], 
                             function(x) {class(x) <- "Currency";x})
   return(data)
}

str(fun(1:10, 2))
#Classes ‘tbl_df’, ‘tbl’ and 'data.frame':  10 obs. of  2 variables:
# $ start: 'Currency' int  1 2 3 4 5 6 7 8 9 10
# $ k    : 'Currency' num  2 4 6 8 10 12 14 16 18 20