【问题标题】:How do I explicitly state that a value passed into an argument is a data frame in R?如何明确声明传递给参数的值是 R 中的数据框?
【发布时间】:2021-06-26 16:32:13
【问题描述】:

我需要能够将我创建的值用作现有数据框。

循环中有效的示例(我可能有 10、20...100 个数据帧,所以我想在循环中执行此操作。

temp1.obj <- subset(temp1.obj, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < .2)
temp2.obj <- subset(temp2.obj, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < .2)
temp3.obj <- subset(temp3.obj, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < .2)

我不知道如何使粘贴参数中的值调用关联的数据框名称。

for(i in 1:aggr_count) {
paste("temp",[i],".obj" sep="") <- subset("temp",[i],".obj" sep=""), subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < .2)
}

是否有任何命令可以修改/声明该值是现有数据框的值? 任何帮助将不胜感激。

【问题讨论】:

  • 使用 lapply,而不是 for 循环。编写一个函数并将您的数据帧作为参数传递给函数。

标签: r dataframe loops


【解决方案1】:

如果你真的想使用循环,这里有一种方法:

dfs <- list(df1, df2, ...)
for(i in length(dfs)) {
    dfs[[i]] <- subset(dfs[[i]], subset = ...)
}

您似乎缺少的部分是df[[i]] 部分(例如,如何引用数据框并覆盖它)。

但是,正如 Limey 所说,这基本上是 lapply 所做的(列表适用),lapply 可能更高效、更简洁。

【讨论】:

    【解决方案2】:

    我们可以使用mget将所有对象返回到全局环境中,然后使用lapply进行循环

    lst1 <- lapply(mget(ls(pattern = '^temp\\d+\\.obj$')), subset,
       subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < .2)
    

    如果我们需要更新全局环境中的对象,请使用list2env

    list2env(lst1, .GlobalEnv)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 2023-03-17
      • 2018-07-08
      • 1970-01-01
      • 2016-12-20
      相关资源
      最近更新 更多