如何在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循环中创建动态变量名称的主要内容,如果未能解决你的问题,请参考以下文章