我正在编写一个在大型PDF中查找文本的脚本,并且我已经写出了裸骨脚本。我正在尝试重构我的代码以在函数中封装主while循环,因此我可以使用PDF列表在其上运行sapply()
。我在主循环中调用的一些函数需要来自该主循环的值:这是我的代码的精简版本:
pdfParse <- function() {
N <- sample(1:50, 1)*2
n = N/2; i = 0
while (i <= N) {
what <- whatP(n)
i = i + length(what)
if !length(what) {break}
else {n <- N/2 - i}
}
n
}
res <- sample(0:1, N)
r = 1
whatP <- function(t) {
r = r*2
if (t%%3) {
if (t%%5) {
return(res[(n/r):n])
} else {
whatP((rev(t)[1]):(rev(t)[1] + r))
} else {return(rep(NaN, 2))}
}
所以我的问题是,如何访问我在其调用的函数中n
函数中定义的变量pdfParse
?即使有可能,我也希望避免将其指定为全局变量。我已经阅读了一些关闭的内容,但我不确定这是否是适用的解决方案。
编辑:为了澄清,whatP(n)
以n
作为其初始参数开始,但它是递归的,因此根据某些条件是否得到满足,它可能最终会在不具有'{'}的向量上运行甚至包括n
。但是我仍然希望返回依赖于n
pdfParse
的内容
答案 0 :(得分:0)
最简单的(也可能是最安全的,假设您的res
函数是递归的)是n
{em} {} whatP
的参数。
whatP <- function(t,n) {
...
}
然后使用两个参数而不是一个参数从pdfParse
调用它。
如果出于某种原因你不想这样做,那么你有两个选择
(a)您实际上可以只使用n
,就好像它在范围内一样。 R的查找变量的规则与C(++)非常不同。按顺序,R搜索
search()
中显示的顺序相同。由于您的函数是在定义n
的函数内调用的,因此它会在第二个(或第三个,给定它是递归的)项目符号下找到适当的值。
(b)您可以使用get
,其中pos
的合适(负值)对应父母。 (或者,使用sys.frame
)。这里不推荐使用递归函数是很棘手的,但在其他情况下可能很有用(并且它会绕过你可能在另一个更近的范围内重新定义的任何n
。