首页 > 解决方案 > 有没有办法在 R 函数中为数据框中的每个子集赋予不同的对象名称?

问题描述

我需要从一个 data.frame 制作不同的子集,然后将这些不同的子集用于后续操作。因此,我需要给每个子集一个唯一的名称。我尝试编写不同的函数,但不知道如何编写。
在这里,我展示了一个子集的函数,即datsub

run_subsets <- function(data, t, x) {
  datsub <- data[eval(substitute(t),data), ]
}
run_subsets(data=dat, t=type=="AM", x=datsub1)

但是我需要为每个不同的子集使用不同的名称,因此在 *datsub" 旁边,例如
datsub1 datsub2等我已经尝试过的内容:

run_subsets <- function(data, t, x) {
  datsub <- data[eval(substitute(t),data), ]
  x <- datasub
}
run_subsets(data=dat, t=type=="AM", x=datsub1)
run_subsets <- function(data, t, x) {
  datsub <- data[eval(substitute(t),data), ]
  gsub("b", "x", "datsub")
run_subsets(data=dat, t=type=="AM", x=b1)
run_subsets <- function(data, t, x) {
  datsub <- data[eval(substitute(t),data), ]
  list(substitute(x)) <- datsub
run_subsets(data=dat, t=type=="AM", x=datsub1)
run_subsets <- function(data, t, x) {
  datsub <<- data[eval(substitute(t),data), ]
  data_name <- paste("datsub", x, sep=".")
  assign(data_name, datsub)
  save(list = data_name, file = paste0("datsub", scenario, ".Rdata"))
}
run_subsets(data=dat, t=type=="AM", x=datsub1)

和 withquote()和这些也与eval(), 和许多其他组合。
有人可以帮我吗?

先感谢您,

罗伯托

PS 我真的在互联网和 Stackoverflow 上搜索了很多东西,发现了很多看起来很有希望的东西,但在这个功能中它需要别的东西。

标签: rfunctionreplacerename

解决方案


也许您最好动态创建子集。一种解决方案可能是您创建一个带有“子集”列的数据框,如下所示:

df <- data.frame(
    a = 1:10
    , b = letters[1:10]
)

subsets <- data.frame(
    datsub1 = df$b == "d"
    , datsub2 = df$a < 5
)

df[subsets$datsub1, ]
df[subsets$datsub2, ]

您还可以在同一数据框中创建“子集”列。这就是我通常做的,以保持我的工作空间干净。


推荐阅读