如何在R中的For循环中创建动态变量名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在R中的For循环中创建动态变量名称相关的知识,希望对你有一定的参考价值。

我有一个数据集/表(称为行为),包含来自24个参与者的数据 - 这些数据以以下格式命名:'s1'到's24'。

表/数据集中的前6行:

head(behavioural)[c(1,17)]
   subj     recognition_order
1   s1                 2
2   s1                 6
3   s1                 7
4   s1                 8
5   s1                 9
6   s1                10

我想为每个参与者创建一个子集,并通过变量recognition_order对每个子集进行排序

我创建了一个循环来执行此操作:

behavioural <- read.table("*my file path*ehavioral.txt", header = TRUE)

subj_counter <- 1


for(i in 1:24) {
subject <- paste("s", subj_counter, sep = "")
subset_name <- paste(subject, "_subset", sep="")

[subset_name] <- behavioural[which(behavioural$subj  == subject), ]
[subset_name] <- subset_name[order(subset_name$recognition_order),]

subj_counter = subj_counter + 1

print(subset_name)
print(subj_counter)
}

而且我很确定逻辑是可靠的,除非我运行循环,它不会创建24个子集。它只创造1 - s24_subset

在这两行代码中,“< - ”之前我需要做什么?

[subset_name] <- behavioural[which(behavioural$subj  == subject), ]
[subset_name] <- subset_name[order(subset_name$recognition_order),]

因为[subset_name]不起作用。

我希望[subset_name]是动态的 - 即每次循环运行时,它的值都会改变,并且每次都会创建一个新的子集/变量。

我在网上看过有关assign()函数的内容但是我不太确定如何将它实现到我的循环中?

先感谢您!

答案

如果你想在split的结果中订购项目,而不是仅使用lapply来传递所需的函数调用,一次在一个数据帧上进行排序(在订购后由lapply重新捆绑在一起:

my_split_list <- split(behavioural, behavioural$subj)
ord.list <- lapply( my_split_list, function(d){ 
                   d[ order(d[['recognition_order']]) , ] }

这是一种常见的范例,称为“分裂 - 应用 - 组合”:“分裂 - 应用 - 组合战略的数据分析”https://www.jstatsoft.org/article/view/v040i01/v40i01.pdf

另一答案

您可以使用eval()parse()完成此操作,如下所示:

eval(parse(text = paste(subset_name, "<- subset_name[order(subset_name$recognition_order),]", sep = '')))

以上是关于如何在R中的For循环中创建动态变量名称的主要内容,如果未能解决你的问题,请参考以下文章

更改变量并将输出保存在R中的for循环中

如何使用R中的循环创建变量A1,A2,...,A100?

是否会以O(n ^ 2)复杂度运行循环中的变量?

如何将 for 循环中的 .pkl 文件附加到 for 循环中创建的 pandas 数据帧?

C++ 中的变量对象名称

如何获取在 for 循环中创建的变量名