r - 将变量分配给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”而不是实际列。关于如何解决这个问题的任何想法?
解决方案
我们可以得到所有data.frame
的list
mget
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]]
而不是在全局环境中创建多个对象
推荐阅读
- apache-spark - 如何在网站上提供 PySpark FPGrowth 关联规则?
- c - 尝试执行茎文件时出现分段错误(核心转储)
- c - 算术级数中几何级数前 n 个元素的总和
- javascript - 在 next js 中添加、删除或编辑数据时如何获取数据?
- mysql - 如何克服 Xamp 服务器中的 ERROR : MySQLdb._exceptions.OperationalError: (1045, "Access denied for user 'ODBC'@'localhost' (using password: NO)")
- javascript - 如何更改只读输入下拉列表的值
- python - 使用 Sympy 获取单个向量基的标量
- spring-boot - hystrix中commandkey groupkey和threadpoolkey的区别
- javascript - 如何使用 Cannon.js + Three.js 进行对象跳转
- javascript - 如何使用 Node/Express 在控制器之间传输信息