R语言 输出使用sapply()的用户定义函数生成的数据的问题

6ie5vjzr  于 2023-05-26  发布在  其他
关注(0)|答案(1)|浏览(145)

我尝试使用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

 ...
smdncfj3

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。

相关问题