我正在使用cbind和loop函数生成多个数据表。
让我们假设我有两个data.frame。每个data.frame为100 * 10。
first<-data.frame(replicate(10,sample(0:1,100,rep=TRUE)))
second<-data.frame(replicate(10,sample(2:10,100,rep=TRUE)))
second
data.frame的每一列都与first
data.frame绑定,生成十个100 * 11 data.frame(second
data.frame的第一+一列)
所以,我创建了这样的循环函数。
for (i in 1:10){
cbind(first,second[,i])}
此功能有两个问题。
首先。运行之后,什么也没发生。仅此语法出现在控制台窗口中。
> for (i in 1:10){
+ ti<-cbind(first,second[,i])}
第二,我想将结果保存在每个不同的对象中,例如t1
,t2
,t3
,....,t10
。所以,我运行了这段代码。
for (i in 1:10){
ti<-cbind(first,second[,i])}
但是,您可能会想,它将结果重复保存在“ ti
”对象中。因此,ti
对象是first
数据帧+ second
data.frame的第十列。
如何制作10个不同的对象,例如t1
,t2
,t3
,t4
...,t10
?
*其他问题:实际上,实际工作中的second
data.frame超过100列。因此,产生的对象是t1
,t2
,.... t100
,....并继续。有没有办法保存这些有组织的对象?
* Akrun答案的其他问题
非常感谢您的帮助。奏效了!
但是,有一个新问题。我要对结果进行的处理有点复杂。
让我们以t1
列表中的lst1
对象为例。这需要两个步骤。
我想使用data.matrix
对象执行t1
函数,并将data.matrix
的结果放入predict
函数中。 (由于功能原因,predict
的原始功能只能计算data.matrix
)
如果是data.frame
,我会跑
data.matrix(t1)
predict(orginalfunction,newx=t1,matrix=TRUE)
但是,在阅读您的答案后,我认为将lapply
与list一起使用是正确的。 data.frame
太乱了。
但是,如何将data.matrix
函数应用于列表的每个对象并将其放入predict
函数中?
答案 0 :(得分:1)
一个选项是lapply
。循环浏览“第二”列,然后cbind
在“第一”列中创建新列,并用选择的名称设置list
的名称。正如@thelatemail提到的(并完全同意),最好不要在全局环境中创建对象,而应使用list
之类的工具从lapply/sapply/vapply
本身进行保存,存储,处理和写入
lst1 <- lapply(second, function(x) cbind(first, newcol = x))
names(lst1) <- paste0("t", seq_along(lst1))
由于它是list
,因此我们可以使用lapply
遍历列表
lapply(lst1, function(x) predict(originalfunction, newx = x, matrix = TRUE))