第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么是具體的危險的評估(解析(…)?

什么是具體的危險的評估(解析(…)?

慕容森 2019-06-18 17:02:40
什么是具體的危險的評估(解析(…)?關(guān)于如何避免使用eval(parse(...))r-value解析-是-通常是次優(yōu)的。避免臭名昭著的-評估解析-構(gòu)造這引發(fā)了問題:為什么特別要eval(parse())被回避?最重要的是,危險是什么?如果代碼不用于生產(chǎn),是否有任何危險?(我在想,任何意外結(jié)果的危險。顯然,如果您不小心正在解析什么,您就會有問題。但這比粗心大意更危險嗎?get()?)
查看完整描述

3 回答

?
胡子哥哥

TA貢獻(xiàn)1825條經(jīng)驗 獲得超6個贊

大多數(shù)反對eval(parse(...))起立畢竟,出于安全考慮,沒有人聲稱R是向互聯(lián)網(wǎng)公開的安全接口,而是因為這樣的代碼通常是可以使用不那么晦澀的方法來完成的,也就是既更快又更人性化的解析方法。R語言應(yīng)該是高級語言,所以cognoscenti(我不認(rèn)為自己在這個組中)的首選是看到既緊湊又富有表現(xiàn)力的代碼。

所以危險在于eval(parse(..))這是一種繞過知識匱乏的后門方法,而提高這一障礙的希望在于人們將改進(jìn)他們對R語言的使用。門仍然敞開著,但希望更多地利用其他功能。卡爾·維托夫特今天早些時候的問題圖解不知道get函數(shù)是可用的,并且他所涉及的問題暴露了對[[函數(shù)的行為(以及如何表現(xiàn))$[[)。在這兩種情況下eval(parse(..))解決方案是可以構(gòu)建的,但它比替代方案更笨重,也不那么清晰。


查看完整回答
反對 回復(fù) 2019-06-18
?
一只甜甜圈

TA貢獻(xiàn)1836條經(jīng)驗 獲得超5個贊

只有當(dāng)您開始調(diào)用另一個用戶傳遞給您的字符串時,安全性問題才會真正出現(xiàn)。如果您正在創(chuàng)建一個在后臺運行R的應(yīng)用程序,這是一個很大的問題,但是對于您要自己編寫代碼的數(shù)據(jù)分析,則不需要擔(dān)心eval關(guān)于保安。

其他一些問題eval(parse(盡管如此。

首先,使用val-Analysis的代碼通常比非解析代碼更難調(diào)試,這是有問題的,因為調(diào)試軟件是兩倍難一開始就寫出來了。

這是一個有錯誤的函數(shù)。

std <- function(){
  mean(1to10)}

愚蠢的我,我已經(jīng)忘記了冒號運算符,并錯誤地創(chuàng)造了我的向量。如果我嘗試并獲得這個函數(shù),R就會注意到這個問題并拋出一個錯誤,指出我的錯誤。

這是最早的解析版本。

ep <- function(){
  eval(parse(text = "mean(1to10)"))}

這,這個將要源,因為錯誤位于有效字符串中。直到稍后,當(dāng)我們開始運行代碼時,才會拋出錯誤。因此,通過使用val-parse,我們已經(jīng)失去了源時錯誤檢查功能。

我還認(rèn)為這個函數(shù)的第二個版本要難讀得多。

另一個問題是與直接執(zhí)行的代碼相比它要慢得多。比較

system.time(for(i in seq_len(1e4)) mean(1:10))
   user  system elapsed 
   0.08    0.00    0.07

system.time(for(i in seq_len(1e4)) eval(parse(text = "mean(1:10)")))
   user  system elapsed 
   1.54    0.14    1.69


查看完整回答
反對 回復(fù) 2019-06-18
?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗 獲得超2個贊

在我的經(jīng)驗中,通常有一種比使用代碼字符串更好的“在語言上計算”的方法;根據(jù)我的經(jīng)驗,高級代碼需要大量的安全保護(hù)來保證合理的輸出。

相同的任務(wù)通??梢酝ㄟ^直接將R代碼作為語言對象來解決;Hadley Wickham對R中的元編程有一個有用的指南。這里:

gtools庫中的Def宏()函數(shù)是我最喜歡的替代方法(沒有半途而廢的R雙關(guān)語)。

require(gtools)# both action_to_take & predicate will be subbed with codeF <- defmacro(predicate, action_to_take, expr = 
    if(predicate) action_to_take)F(1 != 1, action_to_take = print('arithmetic doesnt work!'))F(pi > 3, action_to_take = return('good!'))[1]
     'good!'# the raw code for Fprint(F)function (predicate = stop("predicate not supplied"), action_to_take = stop("action_to_take not
      supplied")) {
    tmp <- substitute(if (predicate) action_to_take)
    eval(tmp, parent.frame())}<environment: 0x05ad5d3c>

這種方法的好處是,您可以得到語法上合法的R代碼??梢哉业礁嚓P(guān)于這個有用函數(shù)的信息。這里:

希望能幫上忙!


查看完整回答
反對 回復(fù) 2019-06-18
  • 3 回答
  • 0 關(guān)注
  • 589 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號