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
相关产品推荐
相关产品推荐

