首先,我的英语不太正确,所以我提前为我的问题中的任何语法错误/错误道歉。
我有这个一般功能:
.my_fun <- function(x,y,...){
<body>
return(
list(
fun1 <- function(x){
<bodyfun1>
},
fun2 <- function(y){
<bodyfun2>
}, ....
)
)
}
用作辅助:
.my_funfun <- .my_fun(x,y,...)
并使用“.my_funfun”作为代码启动器给出“my_fun”的参数
我必须返回给定顺序的值,当然还要返回列表正文中包含的函数的结果。通常,我会单独处理函数,将结果存储在单独的对象中,并将这些对象的值放在列表中,并返回该列表(最简单的方法),但我需要保留我之前显示的结构。
我的问题是:有没有办法解决列表正文中的函数并返回这些值,保持给定的结构?或者以这种方式使用回报是不可能的?我已经将return()用作过早的功能限制器,并将控制结构中的对象用作花式打印机,但这种用法对我来说是新的。
如果您需要特定的代码元素,我可以提供它们。
提前致谢。
答案 0 :(得分:1)
请尝试添加可重现的示例,以便其他人帮助您。
无论如何,如果我正确地提出了你的问题。然后你就可以做到这一点。
my_fun <- function(x,y) {
fun1 <- function(x) {
length(x)
}
fun2 <- function(y) {
sum(y)
}
list(fun1(x),fun2(y))
}
答案 1 :(得分:0)
好的,做些什么,我意识到我在代码上的错误是什么。事情是,当我打电话
myfun$fun1
我没有回答。制作清单的正确方法是
.my_fun <- function(x,y,...){
<body>
return(
list(
fun1 = function(x){
<bodyfun1>
},
fun2 = function(y){
<bodyfun2>
}, ....
)
)
}
所以我可以使用名称s&#34; fun1,fun2(...)作为名称来调用axiliary function.s。
示例:我想创建一个线性全等随机生成器,使用以下代码:
.rCongLin <- function(a, c, m, x0){
v1 <- x0
return(
list(seed=function(xw){
v1 <- xw},
nxt=function(){
v2 <- ((a*v1)+c)%%m
v3 <- v2/m
v1<<-v2
return(v3)
},
shw=function(){
return(list(a=a,c=c,m=m,x0=x0))}
)
)
}
指示:
.rCL <- .rCongLin(51864,35186,4153,1515)
在给定函数的情况下启动数字生成:
rCL=function(n){
replicate(n,.rCL$nxt())}
rCL(45)
其中seed()
重新开始x0,nxt()
计算数字,shw()
显示内部状态(计算值)。 rCL(n)
返回n个副本。
问题是.rCL$x()
(其中x()
是所提到的任何乐趣)如果您使用&#39;&lt; - &#39;操作员(改变它,所以你有一个我正在谈论的东西的演示),但它确实返回&#39; =&#39;。
答案是这些功能适用于&#39; =&#39;因为姓名是在&#39; =&#39;列表上分配的(您使用&#39; =&#39;列出名单中的内容,而不是&#39;&lt; - &#39;。因此,为了制作功能......&#34; citable&#34;在return(list(fun1, fun2...)
的正文中,您需要使用&#39; =&#39;来指定名称fun1, fun2...
。
这是一个简单的答案。对使用&#39; =&#39;感到困惑和&#39;&lt; - &#39;因为在原始代码中,每个作业都是使用&#39; =&#39;来完成的。它容易混淆像我这样的小说程序员:(
非常感谢你的帮助! 我再次对这个答案中的任何重大错误感到抱歉。 我希望这能帮助更多人。