我想创建一个函数,其中参数(input)是未知数量的数据帧(可能会变化),output是数据帧,输入的每列数据帧的数据类型为output.

示例:下面有2个数据帧(数据帧的数量可能会有所不同,因此我不确定如何将其作为函数参数传递).


# Dataframe 1
kpi_id <- c("SL",  "OOS")
kpi_val <- c (1,2)

df1 <-  data.frame(kpi_id,   kpi_val)

> sapply(df1, class)

   kpi_id     kpi_val 
"character"   "numeric"

# Dataframe 2
kpi_id <- c("SL",  "OOS")
kpi_val <- c ("3", "4")

df2 <-  data.frame(kpi_id,   kpi_val)

> sapply(df2, class)
  kpi_id     kpi_val 
"character" "character"

我可以通过以下简单方式得到结果:

df_types1 <- as.data.frame(sapply(df1, class)) 
colnames(df_types)[1] <- deparse(substitute(df1))


df_types2 <- as.data.frame(sapply(df2, class)) 
colnames(df_types)[1] <- deparse(substitute(df2))


df_types3 <- bind_cols(df_types1, df_types2)

> df_types3
              df1       df2
kpi_id  character   character
kpi_val   numeric   character

如何创建一个初始数据帧数量未知的函数,以获得相同的输出?

推荐答案

使用rapply.

rapply(list(df1=df1, df2=df2), class, how='l') |>
  do.call(what='cbind')
#                 df1         df2        
# kpi_id  "character" "character"
# kpi_val "numeric"   "character"

如果由于多个类而得到奇怪的输出,

df1$date <- df2$date <- as.POSIXct(Sys.Date())

rapply(list(df1=df1, df2=df2), class, how='l') |>
  do.call(what='cbind')
#                df1         df2        
# kpi_id  "character" "character"
# kpi_val "numeric"   "character"
# date    character,2 character,2

您可以使用data.class,它只返回第一个:

rapply(list(df1=df1, df2=df2), data.class, how='l') |>
  do.call(what='cbind')
#                df1         df2        
# kpi_id  "character" "character"
# kpi_val "numeric"   "character"
# date    "POSIXct"   "POSIXct"

R相关问答推荐

使用lapply的重新定位功能

在ggplot的注释表格中突出显示最大值

列出用m n个值替换来绘制n个数字的所有方法(i.o.w.:R中大小为n的集合的所有划分为m个不同子集)

如何根据条件计算时差(天)

如何自定义Shapviz图?

如何在R中添加截止点到ROC曲线图?

R for循环返回到先前值

如何在格子中添加双曲曲线

R—将各种CSV数字列转换为日期

矩阵的堆叠条形图,条形图上有数字作为标签

在R gggplot2中是否有一种方法将绘图轴转换成连续的 colored颜色 尺度?

如何在R中描绘#符号?

ComplexHEAT:使用COLUMN_SPLIT时忽略COLUMN_ORDER

如何将一些单元格的内容随机 Select 到一个数据框中?

创建列并对大型数据集中的特定条件进行成对比较的更高效程序

远离理论值的伽马密度曲线下面积的近似

如何在条形图中的x和填充变量中包含多个响应变量?

在使用SliderInput In Shiny(R)设置输入数据的子集时,保留一些情节痕迹

根据排名的顶点属性调整曲线图布局(&Q)

修复标签重叠和ggploy内的空间