我尝试使用sapply()对循环数据生成的数据进行汇总,但不确定为什么我无法访问生成的数据框。我正在建立一个蒙特-卡罗模拟,我有一个函数,它设置了参数和估计值,我希望在一个数据集中的每个数据点上应用这个函数一定的次数。因此,我在函数中使用replicate(),我在一个使用sapply()的函数中使用了它。这一方法似乎有效,但无法获取数据,以说明估计数的分布情况;不输出 Dataframe ,而是打印 Dataframe 。很好,但我现在需要计算平均值和置信区间,并可能绘制一些。
我对R不是很有经验,但这基本上是我想做的:
repapply <- function(iter, datapoint){
estimates <- sapply(datapoint, function(datapoint){
replicate(n=iter, expr=generate_data(datapoint))
})
estimatesdf <- data.frame(estimates)
return(estimatesdf)
}
#test:
repapply(1000, measure)
谁能解释一下为什么没有输出 Dataframe ?它将打印以下信息:
X1 X2
1 476.454335, 6.240725, 4.433396, 24.017384, 36.900104 594.890067, 2.310075, 7.210158, 21.379092, 30.256849
X3 X4
1 359.167706, 5.817891, 7.276368, 20.776742, 23.539489 459.848602, 3.826445, 4.319803, 23.774576, 52.130509
X5 X6
1 504.624220, 8.159456, 4.110860, 23.805009, 42.983076 578.252014, 6.749054, 5.880862, 23.312351, 42.320465
X7 X8
1 427.196750, 7.458934, 3.295953, 24.764725, 45.647360 284.724297, 5.234101, 6.481678, 20.159478, 42.160186
X9 X10
1 307.605356, 4.386591, 5.562230, 22.711697, 3.675961 418.109465, 5.618156, 3.135784, 24.503502, 34.891379
...
1条答案
按热度按时间smdncfj31#
欢迎来到SO!
简短回答:
你必须将
repapply(1000, measure)
赋值给一个值/对象。换句话说,你必须给它命名。例如:df <- repapply(1000, measure)
为什么:
当你在函数环境中定义对象时,它们对于该函数的作用域是局部的。因此,当返回
estimatesdf
时,实际上只是返回它所指向的文本data.frame。因此,您甚至可以将函数的最后两行压缩为return(data.frame(estimates))
,您将获得相同的结果。可选:
与函数中定义的对象不同,预先存在的(在函数作用域之外)对象在函数中被修改后会在函数作用域之外保留其值。如果在函数外部定义
estimatesdf
(例如,将其设置为0),并消除return()
调用,则运行repapply(1000, measure)
将estimatesdf
设置为所需的data. frame。