在r中将数据类型同时指定给多个对象

在r中将数据类型同时指定给多个对象,r,object,apply,type-conversion,lapply,R,Object,Apply,Type Conversion,Lapply,我正在创建一个类型为data.frame的对象,如下所示 df1=as.data.frame(c()) df2=as.data.frame(c()) df3=as.data.frame(c()) . . . df8=as.data.frame(c()) df9=as.data.frame(c()) df10=as.data.frame(c()) 我想在一行中完成这项工作,因为每次我明确提到定义对象和声明其数据类型时 所以我试着这么做 ax=as.list(paste("df",c(1:10),

我正在创建一个类型为data.frame的对象,如下所示

df1=as.data.frame(c())
df2=as.data.frame(c())
df3=as.data.frame(c())
.
.
.
df8=as.data.frame(c())
df9=as.data.frame(c())
df10=as.data.frame(c())
我想在一行中完成这项工作,因为每次我明确提到定义对象和声明其数据类型时 所以我试着这么做

ax=as.list(paste("df",c(1:10),sep = ""))
lapply(ax, as.data.frame)
但这给了我一个列表输出,我也尝试了apply,但没有成功。我该怎么做?有什么建议吗
谢谢…

我们可以使用
lappy

lapply(vector("list", 10), as.data.frame)
或者使用变体

lapply(1:10, function(i) as.data.frame(c()))

或使用
复制

replicate(10, as.data.frame(c()))
如果我们需要一些标识符,那么使用
setNames

setNames(replicate(10, as.data.frame(c())), paste0("df", 1:10))

在全局环境中拥有多个对象可能不是一个好主意,但如果我们的目的是无论如何都拥有它(我们不推荐),从上述方法中,我们可以使用
list2env

list2env(setNames(replicate(10, as.data.frame(c())), paste0("df", 1:10)), .GlobalEnv)

我们可以使用
lappy

lapply(vector("list", 10), as.data.frame)
或者使用变体

lapply(1:10, function(i) as.data.frame(c()))

或使用
复制

replicate(10, as.data.frame(c()))
如果我们需要一些标识符,那么使用
setNames

setNames(replicate(10, as.data.frame(c())), paste0("df", 1:10))

在全局环境中拥有多个对象可能不是一个好主意,但如果我们的目的是无论如何都拥有它(我们不推荐),从上述方法中,我们可以使用
list2env

list2env(setNames(replicate(10, as.data.frame(c())), paste0("df", 1:10)), .GlobalEnv)

您也可以使用assign函数来完成

i = 0
for (i in 1:10){
  assign(paste0("df",i),data.frame())
  }

我发现这更容易,因为我还可以列出我创建的所有名称,并将它们用于进一步的操作。

您也可以使用assign函数来完成

i = 0
for (i in 1:10){
  assign(paste0("df",i),data.frame())
  }

我发现这更容易,因为我还可以列出我创建的所有名称,并将其用于进一步的操作。

这当然会生成数据帧列表,这比OP在全局环境中按顺序命名对象的示例要好得多。OP,除非您真的喜欢复制/粘贴和查找/替换,否则请这样做。@akrun+1用于列出全局环境。点..非常感谢您,这当然会生成数据帧列表,这比OP在全局环境中的顺序命名对象的示例要好得多。OP,除非您真的喜欢复制/粘贴和查找/替换,否则请这样做。@akrun+1用于列出全局环境。重点..非常感谢你为什么名字列表比数据帧列表更有用?我实际上有一个类项目,它处理实时数据,根据条件创建数据帧。现在,对于实时数据,数据帧的数量总是不同的,但我对每个数据帧的操作是相同的。有了列表上的名称,我就可以在列表上迭代并使用get函数来执行操作。但是如果列表中只有数据帧,那么就可以使用
lappy
或其他方法,在数据帧列表上迭代,而根本不使用
get
。这些操作对于lappy来说还不够小。数据帧是基于一个优化代码生成的,该代码将自行车共享系统的某些码头分组。一旦对车站进行分组,我必须使用LPsolve找到要转移的自行车数量,并使用传单绘制它们。数据帧的数量通常在3到8之间变化,但理论上,它们可能超过100个。如果你有兴趣,我可以分享我的代码。为什么名字列表比数据帧列表更有用?我实际上有一个类项目,它处理实时数据,根据条件创建数据帧。现在,对于实时数据,数据帧的数量总是不同的,但我对每个数据帧的操作是相同的。有了列表上的名称,我就可以在列表上迭代并使用get函数来执行操作。但是如果列表中只有数据帧,那么就可以使用
lappy
或其他方法,在数据帧列表上迭代,而根本不使用
get
。这些操作对于lappy来说还不够小。数据帧是基于一个优化代码生成的,该代码将自行车共享系统的某些码头分组。一旦对车站进行分组,我必须使用LPsolve找到要转移的自行车数量,并使用传单绘制它们。数据帧的数量通常在3到8之间变化,但理论上,它们可能超过100个。如果你感兴趣,我可以分享我的代码。