2015-08-16 64 views
3

对于R中的循环我相当新。我想遍历数据帧,它们按顺序编号以对它们执行操作。 的dataframes被称为总并且顺序编号15如何在R中循环

total1 
total2 
total3 

我想简单地了解如何从一个循环打印这些对象的名称,所以我可以用这个作为一个对他们执行其他操作的起点。目前,所有我做的是:

为(N在1:15) {打印总[N] }

,但我不断收到错误

Error: object 'total' not found 

上午什么我做错了?我已经创建了所有总数据帧

+1

(模式='总\\ d +')''或用'cat','cat(ls(pattern ='total \\ d +'),sep =“\ n”)包装' – akrun

+0

好吧,但是真的我在问如何创建一个循环这样我就可以根据该迭代的n值来引用循环内的数据帧,例如total10等。 –

+0

print是我能想到的最简单的例子 –

回答

4

如果我们有total后跟一些数字的多个对象,我们可以通过ls获取全局环境中的对象名称并指定pattern参数。我们使用mget获取存储在对象中的值list。假设,我们要添加一个新的专栏中,我们可以使用lapply来遍历listtransform

lst <- mget(ls(pattern='total\\d+')) 
lst1 <- lapply(lst, transform, newCol=V1*8) 

创建一个新的专栏中,我将随时向list自身内的data.frames,而不是在更新对象全球环境。假设,如果你需要做的

list2env(lst1, envir=.GlobalEnv) 

不推荐,因为大多数操作都可以在list包括其写入新文件或现有内完成。此外,使用lapply/read.table读取list中的所有文件可能会更好,而不是在全局环境中创建多个对象。

2

错误消息是现货:没有名为total的对象。相反,你有对象total1 ...。为了解决这个问题,把你的data.frame s转换为列表,而不是通过附加指数编号他们:

total = list(
    first_data_frame, 
    second_data_frame, 
    … 
) 

我假设你生成/从一些源加载你的data.frame S,所以将它们放入一个列表,而比单独的变量应该是直截了当的。

0

我认为你的问题可能与你最终想要做的想法得到帮助,但认为如果你想打印物体的名字`LS我折腾了这一点

names <- paste("total", 1:15, sep="") 
names[1] 
names[15] 
names[1:15]