|
|
|
|
|
|
m******r 发帖数: 1033 | 1 其实没有bug, 都能正确执行,但我无法理解下面20多行R代码是怎么跑的,想把里面的
函数打印出来,也打不出来。 以前学C的时候,都有一个watch window, 每跑一步,看
看里面变量如何变化,就逐渐理解程序在干什么。R里面是函数套函数, 我以前都是用
pryr:unenclose 来看看函数里面是什么。 可用在以下的代码,就不灵了。不知道为什
么。
以下代码是来自于Functional Programming in R: Advanced Statistical
Programming for Data Science, Analysis and Finance by Thomas Mailund
我瞎猜可能是这样
第一步:1 +2y +3z
第二步:1 +2*2 +3z
第三部:1 +2*2 +3*3
也有可能是反过来的
第一步x + 2*y +3*3
第二步x + 2*2 +3*3
第三部1+ 2*2 +3*3
curry <- function(f) {
n <- length(formals(f))
cat('how_many_parameters ', n);
if (n == 1) return(f) # no currying needed
arguments <- vector("list", length = n)
last <- function(x) {
arguments[n] <<- x
do.call(f, arguments)
cat('sucess_do_call')
}
cat('out_of_do_call')
make_i <- function(i, continuation) {
force(i) ; force(continuation);
function(x) {
arguments[i] <<- x
continuation
}
}
continuation <- last
for (i in seq(n-1, 1)) {
continuation <- make_i(i, continuation)
cat('this_is_in_for_loop', i)
#unenclose(continuation)
}
continuation
}
f <- function( x , y, z) x + 2*y +3 *z
curry(f)(1)(2)(3); | n*****3 发帖数: 1584 | 2 The best way to get a intro functional programming book/blog. R is not the
best language to start to learn these idea.
curry/partial .. use a lot of idea like "function as parameter.." ,
you can see/print what this point it, but you can NOT see the value before
it is evaluated.
【在 m******r 的大作中提到】 : 其实没有bug, 都能正确执行,但我无法理解下面20多行R代码是怎么跑的,想把里面的 : 函数打印出来,也打不出来。 以前学C的时候,都有一个watch window, 每跑一步,看 : 看里面变量如何变化,就逐渐理解程序在干什么。R里面是函数套函数, 我以前都是用 : pryr:unenclose 来看看函数里面是什么。 可用在以下的代码,就不灵了。不知道为什 : 么。 : 以下代码是来自于Functional Programming in R: Advanced Statistical : Programming for Data Science, Analysis and Finance by Thomas Mailund : 我瞎猜可能是这样 : 第一步:1 +2y +3z : 第二步:1 +2*2 +3z
| m******r 发帖数: 1033 | 3 谢谢指教。 请问有办法把continuation打出来吗? 比如x +2y +3*3, 这样我知道每一
步loop在做什么。
三民主义, dracobe都来谈谈吧。
【在 n*****3 的大作中提到】 : The best way to get a intro functional programming book/blog. R is not the : best language to start to learn these idea. : curry/partial .. use a lot of idea like "function as parameter.." , : you can see/print what this point it, but you can NOT see the value before : it is evaluated.
| n******7 发帖数: 12463 | 4 我写R的时候也有这个疑问,如何debug?
我记得Rstudio现在可以设置断点了吧
不过函数套函数的时候要怎么搞呢?
以前R的code一旦写多了,debug就是个噩梦
特别是要跑半个小时来reproduce某个bug。。 | d******c 发帖数: 2407 | 5 加个browser(),那是个交互R shell,然后可以一步一步往前走看发生了什么,还可以
执行任何命令,检查任何内存变量。
另外我几乎没用过currying,觉得这东西在解决一个根本不重要的问题。
这本书是什么,amazon一个review都没有,作者是个搞bioinfo的,对这种还有packet
的书我都敬而远之。不是不尊敬bioinfo,是搞bioinfo的教人编程感觉不太靠谱。就算
作者是CS背景,但在bioinfo领域编程,整个环境就不是个注重代码质量的环境。
我看重函数编程的是它减少全局性,函数行为完全可预测没有外部因素,把函数组合起
来更灵活,函数比类的粒度更小,灵活性表达力更强。 | m******r 发帖数: 1033 | 6 多谢回答。 这个作者写了三本书,都是关于R的, meta programming, OOP, 还有这本
。 欧洲人,写得可以说比较通俗易懂(比较而言),有时还有图形解释,没找到任何
语法,拼写错误,在这类书里面还是少有的。 反正比R文档强。
R这个东西初学者两大难点,1,每个函数有自己的环境,造个函数就造了个环境; 2.
就是把函数当参数传递。 1其实好理解,类似于local/global 变量; 2如果没有工具
看函数里面的东西,光凭脑子想,就太抽象了。 好比中学讲解什么是f(x), 定义就是
一句话,讲解集合是如何映射到另外一个集合的, 没人听得懂,听懂也不会用。 你得
多讲讲 y=3x , 再听不懂, 就得讲3乘2。
R所谓‘美丽’的地方就是很多代码直接书写f,g,h ,有种看数学书的感觉, ‘丑陋’
之处就她不给你看三乘二是如何实现的. 好比美女,不给你看丑陋的地方,总是让人不
过瘾。
packet
【在 d******c 的大作中提到】 : 加个browser(),那是个交互R shell,然后可以一步一步往前走看发生了什么,还可以 : 执行任何命令,检查任何内存变量。 : 另外我几乎没用过currying,觉得这东西在解决一个根本不重要的问题。 : 这本书是什么,amazon一个review都没有,作者是个搞bioinfo的,对这种还有packet : 的书我都敬而远之。不是不尊敬bioinfo,是搞bioinfo的教人编程感觉不太靠谱。就算 : 作者是CS背景,但在bioinfo领域编程,整个环境就不是个注重代码质量的环境。 : 我看重函数编程的是它减少全局性,函数行为完全可预测没有外部因素,把函数组合起 : 来更灵活,函数比类的粒度更小,灵活性表达力更强。
|
|
|
|
|
|
|