问题:
我有一个data.frame(hlth),由49个向量组成 - 数字(25:49)和因子(1:24)的混合。我试图随机选择50行,然后计算列仅表示数字列(删除其他值),然后将随机行均值放入新的data.frame(beta)。然后我想重复这个过程1000次。
我尝试过这个过程,但返回的值是相同的,新的方法不会输入新的data.frame
以下是data.frame(hlth)的几行和几列
DateIn adgadj Sex VetMedCharges pwtfc
1/01/2006 3.033310 STEER 0.00 675.1151
1/10/1992 3.388245 STEER 2540.33 640.2261
1/10/1995 3.550847 STEER 572.78 607.6200
1/10/1996 2.893707 HEIFER 549.42 425.5217
1/10/1996 3.647233 STEER 669.18 403.8238
到目前为止我使用过的代码:
set.seed[25]
beta<-data.frame()
net.row<-function(n=50){
netcol=sample(1:nrow(hlth),size=n ,replace=TRUE)
rNames <- row.names(hlth)
subset(hlth,rNames%in%netrow,select=c(25:49))
colMeans(s1,na.rm=TRUE,dims=1)
}
beta$net.row=replicate(1000,net.row()); net.row
我发现的两个问题是:
1)每次迭代返回相同的值
2)&#34;总结期间出错:类型&#39;封闭的对象&#39;不是子集表格&#34;当beta $ netrow
任何建议都将不胜感激!!!
答案 0 :(得分:1)
只需添加我的评论(并首先粘贴):
netcol=sample(1:nrow(hlth),size=n ,replace=TRUE)
大概应该由netrow = ...
而错误是一个范围问题--R正在尝试将函数beta
进行子集化,可能是因为找不到netRowMeans
在你定义的data.frame
中,移动到全局环境并在那里抛出错误。
还有其他一些事情。您没有将subset(hlth,rNames%in%netrow,select=c(25:49))
分配给变量,我认为您要分配给s1
,因此colMeans
可能正在您在全局环境中设置的内容上运行。
如果要以这种方式直接将变量传递到数据框beta
,则必须使用正确的列数和行数初始化beta
- 列意味着你已经昏倒将是(1 x 25)
的向量,因此不适合单列。您可能会更好地使用mat
列和25
行来初始化一个名为1000
的矩阵(以避免与屏蔽实际错误消息的范围错误混淆)。
编辑:问题自我发布以来已经略有编辑,但大多数观点仍然有效。