You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言for循环中如何动态命名数据框变量?

在R循环中动态生成df1~df9变量的解决方案

错误原因

你写的代码里,print(get(paste("df", i, sep=""))) = ...这种赋值方式完全不对——get()是用来读取已有变量的,不能把它当成赋值的目标,还套了print(),直接导致赋值的对象不是合法的变量,所以才会报target of assignment expands to non-language object的错误。

解决方法一:用assign()实现动态命名变量

assign()函数可以直接创建指定名称的变量,把抽样结果赋值给它就行,代码改成这样:

for (i in 1:9){
  # 拼接出变量名:df1、df2……df9
  var_name <- paste("df", i, sep = "")
  # 执行抽样并赋值给对应变量
  assign(var_name, sub %>% group_by(dietAandB) %>% sample_n(1))
}

运行完这个循环,你就能在全局环境里找到df1到df9这9个数据框了。

解决方法二:推荐用列表存储(更符合R编程习惯)

单个动态命名变量会让你的工作环境变得杂乱,后续批量操作也麻烦,更推荐把所有抽样结果存在一个列表里:

# 先创建一个空列表
df_list <- list()
for (i in 1:9){
  # 把每次抽样的结果放进列表的第i个位置
  df_list[[i]] <- sub %>% group_by(dietAandB) %>% sample_n(1)
}
# 可选:给列表的每个元素命名为df1~df9
names(df_list) <- paste("df", 1:9, sep = "")

之后要调用第i个抽样结果,直接用df_list[[i]]或者df_list[["df3"]](比如取第三个)就行,批量处理的时候效率更高。

内容的提问来源于stack exchange,提问作者Sam Degregori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:00:54