Convert a Byte-Code Function to an Interpreted-Code Function

Share:

Description

Convert a byte-code function to an interpreted-code function

Usage

1
2
3

Arguments

fun

function to be modified

name

object name

env

namespace

value

new function body

Details

The purpose of these functions is to allow a byte coded function to be converted back into a fully interpreted function as a temporary work around for issues in byte-code interpretation.

unByteCode returns a copy of the function that is directly interpreted from text rather than from byte-code.

assignEdgewise makes an assignment into a locked environemnt.

unByteCodeAssign changes the specified function in its source environment to be directly interpreted from text rather than from byte-code.

Value

All three functions return a copy of the modified function or assigned value.

Note

These functions are not intended as a permanent solution to issues with byte-code compilation or interpretation. Any such issues should be promtply reported to the R maintainers via the R Bug Tracking System at https://bugs.r-project.org and via the R-devel mailing list https://stat.ethz.ch/mailman/listinfo/r-devel.

Author(s)

Gregory R. Warnes greg@warnes.net

References

These functions were inspired as a work-around to R bug https://bugs.r-project.org/bugzilla/show_bug.cgi?id=15215.

See Also

disassemble, assign

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
datURL <- "https://bugs.r-project.org/bugzilla/attachment.cgi?id=1659"
dat <- as.matrix(read.csv(file=datURL, row.names=1))
dist2 <- function(x) as.dist(1-cor(t(x), method="pearson"))
hclust1 <- function(x) hclust(x, method = "single")

distance <- dist2(dat)
cluster  <- hclust1(distance)

dend <- as.dendrogram(cluster)

## Not run: 
    ## In R 2.3.0 and earlier crashes R: with a node stack overflow error
    plot(dend)
    ## Error in xy.coords(x, y, recycle = TRUE) : node stack overflow

## End(Not run)

## convert stats:::plotNode from byte-code to interpreted-code
unByteCodeAssign(stats:::plotNode)

# increase recursion limit
options("expressions"=5e4)

# now the function does not crash
plot(dend)

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.