在for循环中辅助函数

在for循环中辅助函数,r,R,我正在开发一个软件包,希望生成一些返回非常相似结果的函数。我认为在for循环中分配函数名会很容易,但我没有得到期望的结果。名称每次都会更新,但该值似乎仅使用i的最后一个值 我不确定会发生什么事 return\u letter一个简单的解决方案是创建函数作为字符串,解析然后求值 for(i in 1:3) eval(parse(text = paste0("fn_", i, " <- function()letters[", i, "]"))) #fixed mistake. La

我正在开发一个软件包,希望生成一些返回非常相似结果的函数。我认为在for循环中分配函数名会很容易,但我没有得到期望的结果。名称每次都会更新,但该值似乎仅使用
i
的最后一个值

我不确定会发生什么事


return\u letter一个简单的解决方案是创建函数作为字符串,解析然后求值

for(i in 1:3)
     eval(parse(text = paste0("fn_", i, " <- function()letters[", i, "]"))) #fixed mistake. Last i should be outside quotes.
for(1:3中的i)

eval(parse)(text=paste0(“fn_u”),i,“谢谢你的提示。解决方案仍然会返回上一次迭代(所有的“c”)。想一想为什么?哦,我看到我引用了后面的i。两个带iin
paste0(-)
的i都应该不带引号。它返回c的原因是我存储在全局环境中。(for循环之后,
i
的最后一个值是3,这个值将保存在函数中使用的
globalenv()
)我已经更新了我的答案,修复了这个错误。这看起来更像是“糟糕的做法”,而不是“圆滑的做法”"。很难想象这会在包中的任何地方发生——创建函数都需要执行代码,然后在用户环境中创建函数,而不是在包名称空间中创建函数,这意味着它们不能在包中使用,并且会覆盖用户已经拥有的、碰巧具有相同名称的任何函数这样做的最巧妙的方法是使用,这就是所做的,例如,通过
colorRamp
colorRampPalette