从我自己的主机调用注册的knitr引擎
我希望在knitr中预处理传递给sql引擎的文本,以便它能够处理由我的sql Server工具生成的代码,该工具输出的代码如下所示从我自己的主机调用注册的knitr引擎,r,knitr,R,Knitr,我希望在knitr中预处理传递给sql引擎的文本,以便它能够处理由我的sql Server工具生成的代码,该工具输出的代码如下所示 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE dbo.Person( Person int NOT NULL, acct varchar(1) NOT NULL, Kpl varchar(10) NULL, Fac varchar(10) NULL, Inst varchar(1
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE dbo.Person(
Person int NOT NULL,
acct varchar(1) NOT NULL,
Kpl varchar(10) NULL,
Fac varchar(10) NULL,
Inst varchar(10) NULL,
CONSTRAINT PK_Person PRIMARY KEY CLUSTERED
(
Person ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY
) ON PRIMARY
GO
ALTER TABLE dbo.Person ADD DEFAULT (getdate()) FOR _Timestamp
GO
ALTER TABLE dbo.Person ADD DEFAULT (host_name()) FOR _Hostname
GO
ALTER TABLE dbo.Person ADD DEFAULT (original_login()) FOR _Username
GO
我目前有以下发动机代码;它似乎适用于编织,但当我使用RStudio中的“播放”按钮运行它时,它似乎没有任何作用
knitr::knit_engines$set(tsql = function(options) {
code <- paste(options$code, collapse = "\n")
code <- paste(c("\n", code, "\n"), collapse='') # so that GOs at the start or end will be picked up
code <- strsplit(code, "(?i)\nGO\n", perl = TRUE)[[1]] # split into chunks. R returns a matrix even if you give it a string, so pick the first element
code
# trim chunks and remove empty
code <- stri_remove_empty(str_trim(code))
# split chunks into arrays again
code <- lapply(code, function(c) { return(strsplit(c, "\n")[[1]])})
sql <- knitr::knit_engines$get('sql')
# apply sql engine to all chunks
lapply(code, function(c) {
options$code <- c
sql(options)
})
})
在对每个块应用sql函数后,需要将结果组合成单个字符串,例如change
lapplycode,functionc{
选项$code