在R中如何多次调用参数变化的函数并将结果存入数据框或列表?
问题根因
- R 中
for循环本身没有返回值,你直接把for循环赋值给test变量,自然只能得到NULL - 循环内部每次执行
test <- rnorm(...)都会直接覆盖上一轮的test值,无法累计存储所有运行结果 return()仅在自定义函数内部生效,在顶层代码中使用不会返回你需要的计算结果
实现方案
1 基础for循环写法(最容易理解)
如果需要将结果存储为数据框(便于后续分析),可以先初始化容器再循环赋值:
# 定义M的取值,这里和你示例一致取10 M <- 10 # 初始化数据框,提前分配空间效率更高 result_df <- data.frame( sd = 1:M, value = numeric(M) ) # 循环赋值 for(i in 1:M){ result_df$value[i] <- rnorm(n = 1, mean = 0, sd = i) }
运行后直接调用result_df就能看到所有sd参数对应的生成结果。如果需要存为列表,将初始化容器换成result_list <- vector("list", M),循环内赋值为result_list[[i]] <- rnorm(n=1, mean=0, sd=i)即可。
2 更简洁的R风格写法
用sapply/lapply替代显式循环,代码更短效率更高:
# 直接生成存储结果的向量 result_vec <- sapply(1:10, function(i) rnorm(n=1, mean=0, sd=i)) # 生成列表格式结果 result_list <- lapply(1:10, function(i) rnorm(n=1, mean=0, sd=i)) # 一步生成数据框 result_df <- data.frame( sd = 1:10, value = sapply(1:10, function(i) rnorm(n=1, mean=0, sd=i)) )
内容的提问来源于stack exchange,提问作者this_is_not_easy
相关产品推荐
相关产品推荐

