Удалите лишние пробелы с помощью `gsub` для` print.xtable` - PullRequest
1 голос
/ 24 декабря 2011

Я новичок в разработке 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),...)

1 Ответ

7 голосов
/ 24 декабря 2011

sanitize.text.function ожидает функцию , но вы передаете результат clean(s) вместо функции (аргумент будет оценен!).Таким образом, вы можете либо использовать sanitize.text.function=clean, либо, если вам нужно переназначить аргументы sanitize.text.function=function(x) clean(x), то есть искомую конструкцию лямбда-функции (без имени) (последняя, ​​очевидно, имеет смысл только для чего-то более сложного).

...