首页 > 解决方案 > 将变量分配给R中粘贴的列名称

问题描述

我有一些带有名称的数据框:

均值图 1、均值图 2、均值图 3 等。

我正在尝试编写一个 for 循环来对每个数据帧执行一系列方程。

我正在尝试使用 paste0 功能。

我想要发生的是让 x 成为每个数据集的一列。所以代码应该像下面这样工作:

x <- Meanplots1$PAR

但是,由于我想将其放入 for 循环中,因此我想将其格式化为:

for (i in 1:3){
   x <- paste0("Meanplots",i,"$PAR")
   Dmodel <- nls(y ~ ((a*x)/(b + x )) - c, data = dat, start = list(a=a,b=b,c=c))
}

这样做是将 x 分配给列表“Meanplots1$PAR”而不是实际列。关于如何解决这个问题的任何想法?

标签: r

解决方案


我们可以得到所有data.framelistmget

lst1 <- mget(ls(pattern = '^MeanPlots\\d+$'))

然后循环list使用lapply并应用模型

DmodelLst <- lapply(lst1, function(dat) nls(y ~ ((a* PAR)/(b + PAR )) - c,
         data = dat, start = list(a=a,b=b,c=c)))

将“x”替换为列名“PAR”。


在 OP 的循环中,创建一个 NULLlist来存储输出 ('Outlst')、 get来自 的对象的值paste0,然后应用带有不带引号的列名的公式,即 'PAR'

Outlst <- vector("list", 3)
ndat <- data.frame(x = seq(0,2000,100))

for(i in 1:3) {
   dat <- get(paste0("MeanPlots", i))
   modeltmp <- nls(y ~ ((a*PAR)/(b + PAR )) - c, 
          data = dat, start = list(a=a,b=b,c=c))
   MD <- data.frame(predict(modeltmp, newdata = ndat))
   MD[,2] <- ndat$x
   names(MD) <- c("Photo","PARi")
   Outlst[[i]] <- MD



  }

现在,我们提取每个list元素的输出

Outlst[[1]]
Outlst[[2]]

而不是在全局环境中创建多个对象


推荐阅读