1
函數對象,我需要通過命令的列表,以全面評估,以便它是相同的功能的「手動」版本中創建的功能。評估上市字符串創建中的R
背景:我使用的潔牙機的功能在微軟R服務器,需要將一組變換的功能。潔牙機約需要傳遞以下爲指定了一個措辭準確一個功能非常挑剔:
functionThatWorks <- function(data) {
data$marital_status_p1_ismarried <- impute(data$marital_status_p1_ismarried)
return(data)
}
我有一個創建轉換(和數百更多的這個列表的功能,因此需要以功能的寫作)。
transformList <- list ("data$ismarried <- impute(data$ismarried)",
"data$issingle <- impute(data$issingle)")
該行輸出,我想控制檯評估的字符串,但我不知道的方式將其從控制檯輸出移動到一個函數中使用:
cat(noquote(unlist(bquote( .(noquote(transformList[1]))))))
我需要評估functionIWant,使其等同於functionThatWorks。
functionIWant <- function(data){
eval( cat(noquote(unlist(bquote( .(noquote(transformList[1])))))))
return(data)
}
identical(functionThatWorks, functionIWant)
編輯:在基於@dww的代碼中添加答案。它在ScaleR中運行良好。它是相同的,減去無意義的間距。
functionIWant <- function(){}
formals(functionIWant) <- alist(data=NULL)
functionIWant.text <- parse(text = c(
paste(bquote( .(noquote(transformList[1]))), ";", "return(data)\n")
))
body(functionIWant) <- as.call(c(as.name("{"), functionIWant.text))
也許嘗試一些的eval(解析(文= ...))或EVAL(替代(...)) –
謝謝,但我已經使用eval做了很多舞蹈的解決這個代碼() parse(),bquote(),unlist()和noquote()並沒有成功。沒有嘗試組合創建與「手動」條目相同的功能對象。函數對象僅包含輸入的代碼,而不包含代碼應該計算的內容。 – nb01