对于R中的一次性使用函数是否有更好的干净方法?

对于R中的一次性使用函数是否有更好的干净方法?,r,lambda,R,Lambda,在很多情况下,我需要编写一些代码来组成一个逻辑组,并将其放入函数中。但是,由于只使用了一次,因此将代码从应用代码的位置移开并给它一个单一的使用名称会更加麻烦,从而污染名称空间 今天,我在做实验,我还遇到了一个关于的问题。因此,我实现了如下逻辑: x <- (function(charsBase, n, m) { z <- apply( matrix( sample(unique(charsBase), n*m*3, replace = TRUE)

在很多情况下,我需要编写一些代码来组成一个逻辑组,并将其放入函数中。但是,由于只使用了一次,因此将代码从应用代码的位置移开并给它一个单一的使用名称会更加麻烦,从而污染名称空间

今天,我在做实验,我还遇到了一个关于的问题。因此,我实现了如下逻辑:

x <- (function(charsBase, n, m) {
  z <- apply(
    matrix(
        sample(unique(charsBase), n*m*3, replace = TRUE)
        , nrow = n*3, ncol = m
    )
    , 1
    , paste, collapse="")
  head(unique(z), n)
}) (LETTERS, 1000, 3)

x您可以使用带有列表或数据框的
作为第一个参数。例如:

result <- with(list(a=3, b=4), {
    foo <- a + b
    foo^2
})

result我会使用
local
,行更短,代码更可读:

x <- local({
  charsBase <- LETTERS
  n <- 1000
  m <- 3
  sam <- sample(unique(charsBase), n*m*3, replace = TRUE)
  mtx <- matrix(sam, nrow = n*3, ncol = m)
  z <- apply(mtx, 1, paste, collapse="")
  head(unique(z), n)
})

您不必跟踪分配,除非您使用全局分配,否则一切都是临时的。

您能举一个创建或删除对象时“内存泄漏”的例子吗?
local({
  charsBase <- LETTERS
  n <- 1000
  m <- 3
  sam <- sample(unique(charsBase), n*m*3, replace = TRUE)
  mtx <- matrix(sam, nrow = n*3, ncol = m)
  z <- apply(mtx, 1, paste, collapse="")
  x <<- head(unique(z), n)   # notice the wyrd assignment operator
})
local(browser())