循环通过ls()或对象()?

Ray*_*Ray 17 r

反正我是否可以遍历一些对象并为每个对象应用一个函数?

当我键入ls()或时objects(),它返回一个对象名称列表.我想迭代这个列表,识别那些data.frame,然后针对每个对象运行一个函数.

如何从函数lsobjects通过函数传递条目?

如果这看起来像一个愚蠢的问题,请道歉......

JD *_*ong 17

@jverzani给出的关于确定哪些对象是数据帧的答案是好的.那么让我们从那开始吧.但是我们只想选择data.frames的项目.所以我们可以这样做:

#test data
df <- data.frame(a=1:10, b=11:20)
df2 <- data.frame(a=2:4, b=4:6)
notDf <- 1

dfs <- ls()[sapply(mget(ls(), .GlobalEnv), is.data.frame)]
Run Code Online (Sandbox Code Playgroud)

数据框的名称现在是dfs对象中的字符串,因此您可以将它们传递给其他函数,如下所示:

sapply( dfs, function(x)  str( get( x ) ) )
Run Code Online (Sandbox Code Playgroud)

我使用get()命令实际按名称获取对象(有关详细信息,请参阅R FAQ)

我已经回答了你的上述问题,但我怀疑如果你将数据框组织成列表项,你的代码将更容易阅读和维护.显然我不能肯定地说这个,但我无法想出一个用例,迭代查找数据帧的所有对象比将数据帧保存在列表中然后调用该列表中的每个项目更好.


jve*_*ani 11

您可以使用get或mget从其名称中获取对象,并使用其中一个apply类型函数进行迭代.例如,

sapply(mget(ls(), .GlobalEnv), is.data.frame)
Run Code Online (Sandbox Code Playgroud)

将告诉您全局环境中的哪些项目是数据框架.要在函数中使用,可以为ls调用指定环境.


Woj*_*ala 5

您可以使用"eapply"在环境中循环对象.