【发布时间】:2017-10-10 11:54:37
【问题描述】:
我可以制作这个代码:
#set seed
set.seed(848)
#make variables (similar, not same)
myvar_a <- rnorm(n = 100, mean = 1, sd = 2)
myvar_b <- rnorm(n = 100, mean = 2, sd = sqrt(3))
myvar_c <- rnorm(n = 100, mean = 4, sd = sqrt(5))
myvar_d <- rnorm(n = 100, mean = 8, sd = sqrt(8))
#transform variables
for(i in 1:4){
if(i ==1){
myvar_1 <- myvar_a
} else if (i==2) {
myvar_2 <- myvar_b
} else if (i==3) {
myvar_3 <- myvar_b
} else {
myvar_4 <- myvar_b
}
}
它给了我这个:
有没有办法用“粘贴”和循环变量来做到这一点?
在 MATLAB 中有 eval 将构造的字符串视为一行代码,因此我可以创建句子然后在代码中运行它们。
【问题讨论】:
-
您可以在 R 的 MatLab 中执行类似的操作,但您不应该这样做。 R 是一种实际的编程语言。使用列表来存储这些变量。这将使后续步骤更容易。
-
我在单独的文件中有一堆结果,这些结果来自我要加载的另一个程序的单独运行。它们是复杂的结构,而不是简单的数据,并且它们在加载时都具有相同的名称。当您说“列表”时,您的意思是“复杂数据结构的列表”吗? R列表像MatLab结构吗?
-
按照 roland 的建议将它们放入一个列表中。列表是 R 中最通用的对象,每个列表元素都可以包含任何其他 R 对象,而不管另一个元素中包含什么。所以对象的复杂性是无关紧要的。如果您使用一些有序的过程来加载数据,您可以使用类似的过程来命名您的列表项。有关一些有用的提示,请参阅 gregor 对this post 的回答。
-
动态变量命名一般来说是个坏主意,在 MATLAB 中使用
eval是one of the worst practises possible,尤其是这样做。