1

我是 R 开发新手,必须修改一些现有代码。具体来说,我需要更改一个print()调用,以便它删除无关的连续空格字符。

我找到了sanitize.text.function参数,并成功地将我的自定义函数传递给了 print() 函数。它做了我需要它做的事情。该代码如下:

print(xtable(x,...),type="html",
      sanitize.text.function = function(s) gsub(" {2,}", "", s),...)

现在我要做的是将“匿名”/“内联”函数代码提取到一个命名函数中,就像这样......

clean <- function(s) { gsub(" {2,}", "", s) }
print(xtable(x,...),type="html",sanitize.text.function = clean(s),...)

但是,当我执行此操作时,我得到以下信息:

gsub(" {2,}", "", s) 中的错误:找不到对象 's'

定义函数的愿望有两个方面:

  1. 创建可在其他地方引用的可重用代码块,以及
  2. gsub()添加可能需要的更多或类似执行的能力,

例如,

clean <- function(s) { 
    gsub(" {2,}", "", s)
    gsub(">(.*?:)", "<span style=float:left>\1</span>", s)
}

print(xtable(x,...),type="html",sanitize.text.function = clean(s),...)
4

1 回答 1

7

sanitize.text.function需要一个函数,但您传递的是结果clean(s)而不是函数(将评估参数!)。因此,您可以使用sanitize.text.function=clean或者如果需要重新映射参数sanitize.text.function=function(x) clean(x),这是您正在寻找的 lambda(未命名)函数构造(显然,后者只对更复杂的东西有意义)。

于 2011-12-24T06:12:04.710 回答