R语言循环生成目标格式数据框问题求助
修正R语言代码以生成目标数据框
原代码问题分析
- 未初始化
data1,首次循环执行rbind时会报错 - 使用
rbind将每个gamma对应的计算结果作为行添加,但目标格式要求每个gamma对应一列 - 手动用
2.718替代自然底数e,计算精度不足
修正后的代码
se <- seq(-0.4, 0.1, length.out = 100) t <- 100 gamma <- c(0.0000001, 0.000001, 0.00001, 0.001, 0.01, 0.1, 1) # 初始化空数据框 data1 <- data.frame() for (i in 1:length(gamma)) { # 用exp()计算自然指数,精度更高 newcol <- ((gamma[i] * exp((se + gamma[i]) * t)) - gamma[i]) / ((gamma[i] * exp((se + gamma[i]) * t)) + se) # 用cbind将计算结果作为列添加 data1 <- cbind(data1, newcol) } # 设置匹配目标格式的列名 colnames(data1) <- paste0("newcol_", gsub("\\.", "", as.character(gamma))) # 单独调整最后一列的列名(对应gamma=1) colnames(data1)[ncol(data1)] <- "newcol_01"
更高效的向量化实现(替代循环)
如果追求代码简洁和运行效率,可使用sapply实现向量化计算:
se <- seq(-0.4, 0.1, length.out = 100) t <- 100 gamma <- c(0.0000001, 0.000001, 0.00001, 0.001, 0.01, 0.1, 1) # 一次性生成所有列的计算结果 mat <- sapply(gamma, function(g) { ((g * exp((se + g) * t)) - g) / ((g * exp((se + g) * t)) + se) }) # 转换为数据框并设置列名 data1 <- as.data.frame(mat) colnames(data1) <- paste0("newcol_", gsub("\\.", "", as.character(gamma))) colnames(data1)[ncol(data1)] <- "newcol_01"
内容的提问来源于stack exchange,提问作者user16611689
相关产品推荐
相关产品推荐

