R 如何使用管道设置变量的类?
我创建了一个函数,该函数通过几个基本输入构建一个TIBLER 如何使用管道设置变量的类?,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
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