[問題] 檔名字串當成變數,get()有時成功有時失敗

看板R_Language作者 (玻璃做的大叔)時間3年前 (2021/08/21 10:10), 編輯推噓0(006)
留言6則, 1人參與, 3年前最新討論串1/2 (看更多)
[問題敘述]: 我有個程式碼會把外部檔案的檔名存入固定變數,之後要換檔案分析,只要重新 choose.files再 tableName <- strsplit(basename(raw_name), ".", fixed = TRUE)[[1]][1] > tableName [1] "midterm_table" 就可以在tableName存入檔名字串,我只要用get(tableName)就可以取代所有 原本主檔名字串(本範例用"midterm_table"),譬如: sapply(get(tableName), class) %>% unique() 這是成功的。 下面的程式碼,我是要列出表格中的NA,把他改成一個"noData"方便之後計算, get(tableName)$Other.Injury[is.na(get(tableName)$Other.Injury)] 成功執行,會顯示一整串NA(廢話),但是當我多加後面修改的自串 get(tableName)$Other.Injury[is.na(get(tableName)$Other.Injury)] = "noData" Error in get(tableName)$Other.Injury[is.na(get(tableName)$Other.Injury)] = "noData" : could not find function "get<-" 但是改成字串檔名 midterm_table$Other.Injury[is.na(get(tableName)$Other.Injury)] = "noData" 這樣就成功了。 我不懂那個could not find function "get<-"是怎麼回事,因為其他程式碼都get這樣 也沒問題,何況同一句後面也有用get(...)$,卻唯獨這個語法會出錯。 請問有人知道問題出在哪邊嗎? [環境敘述]: R version 3.4.4 (2018-03-15) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 7 x64 (build 7601) Service Pack 1 Matrix products: default locale: [1] LC_COLLATE=Chinese (Traditional)_Taiwan.950 LC_CTYPE=Chinese (Traditional)_Taiwan.950 [3] LC_MONETARY=Chinese (Traditional)_Taiwan.950 LC_NUMERIC=C [5] LC_TIME=Chinese (Traditional)_Taiwan.950 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] openxlsx_4.0.17 magrittr_1.5 loaded via a namespace (and not attached): [1] compiler_3.4.4 tools_3.4.4 yaml_2.1.14 Rcpp_1.0.0 -- 起初,他們追殺共產主義者,我沒有說話,因為我不是共產主義者; 接著,他們追殺猶太人,我沒有說話,因為我不是猶太人; 後來,他們追殺工會成員,我沒有說話,因為我不是工會成員; 此後,他們追殺天主教徒,我沒有說話,因為我是新教教徒; 最後,他們奔我而來,卻再也沒有人站起來為我說話了。 《First They Came(他們首次來時)》,Martin Niemoller牧師(1892-1984) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.176.20.48 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1629511858.A.BBF.html

08/21 11:47, 3年前 , 1F
請提供可重現錯誤的程式碼~
08/21 11:47, 1F

08/21 11:53, 3年前 , 2F
是說我查get的說明,他是從命名空間(name space)中搜尋是否
08/21 11:53, 2F

08/21 11:53, 3年前 , 3F
有符合的物件,會不會是你選取檔案的程式碼並沒有在命名空
08/21 11:53, 3F

08/21 11:53, 3年前 , 4F
間中?另外get(x)的x要用字串形式,不知道你為什麼可以不用
08/21 11:53, 4F

08/21 11:53, 3年前 , 5F
?撇除這點,不知道是不是跟你賦值的動作有關?(總之沒提供
08/21 11:53, 5F

08/21 11:53, 3年前 , 6F
程式碼只能亂猜…坐等其他大大回覆 哈哈哈)
08/21 11:53, 6F
文章代碼(AID): #1X862ok_ (R_Language)
文章代碼(AID): #1X862ok_ (R_Language)