Gmail APIにアクセストークンを提供せずに再現可能なSNAFUを簡単に提供できないため、しかし、私の希望は、私の記述から十分に明らかな問題を乗り越えていることです。私達は見るでしょう...同じR関数がグローバルEnvの関数/オブジェクトとして動作し、Rパッケージから読み込んだときに機能しない
私はGoogle Scholar AlertのgmailメッセージIDを取得し、それを記事タイトル、著者、出版物、日付などの列を持つデータフレームに解析する関数を書いています。私の謎私はそれを対話的にロードするときに働くのと同じコードです(すなわち、セッションRAMに関数をロードします。 "my_fancy_function < - 関数(引数){blah blah})"は、関数をRの一部としてロードすると機能しませんパッケージ(la 'devtools :: load_all( "/ mypackage /")')。私のパッケージの他の主な機能はうまくいきますが、devtools :: load_all( "my_misbehaving_package /")を使ってパッケージをロードした後、パッケージのバージョンから使用しようとすると、この問題が起きます。
以下は、パッケージの一部としてロードされたときにヒールにならない関数の.Rファイルの内容です。このコードでは、あまりにも厄介なコード混乱があります。あなたの答えに指が揺れる。これは古典的な "文字列としての文字列" SNAFUのパッケージ版のように感じますが、私に教えてください。この問題は、関数評価の非常に早い段階で発生すると思われます。
UseMethod( "read_xml")のエラー: クラス "NULL"のオブジェクトに適用されるread_xmlの適用可能なメソッドがありません「
そして、ここでは、この機能のために私の全体の病気のコードです:library(stringr)
library(rvest)
library(plyr)
library(dplyr)
library(lubridate)
library(gmailr)
GScholar_alert_msg_to_df <- function(message_id){
one_message <- message(message_id)
msg_html <- body(one_message)
title <- read_html(msg_html) %>% html_nodes("h3") %>% html_text()
link <- read_html(msg_html) %>% html_nodes("h3 a") %>% html_attr("href")
msg_chunks <- msg_html %>% str_split("<a href") %>% unlist
msg_chunks <- msg_chunks[2:(length(msg_chunks)-2)]
excerpt <- msg_chunks %>% str_replace_all(fixed("<b>"), "") %>%
str_replace_all(fixed("</b>"), "") %>%
str_replace_all(fixed("<br>"), "") %>%
str_extract("<(font size=2 color=#222222|font size=\"-1\")>(.*?)</font>") %>%
unlist %>% str_replace_all("<(font size=2 color=#222222||font size=\"-1\")>", "") %>%
str_replace_all("</font>", "")
author_pub_field <- msg_chunks %>% str_replace_all(fixed("<b>"), "") %>%
str_replace_all(fixed("</b>"), "") %>%
str_extract("<font size=(2|\"-1\") color=#(006621|009933|008000)>(.*?)</font>") %>%
unlist %>%
str_replace_all("<font size=(2|\"-1\") color=#(006621|009933|008000)>", "") %>%
str_replace_all("</font>", "")
one_message_df <- data.frame(title, excerpt, link, author_pub_field, stringsAsFactors = FALSE)
one_message_df$date <- date(one_message) # needs reformatting
one_message_df$date %>% str_replace("[[:alpha:]]{3}, ", "") %>%
str_extract("^.{11}") %>% dmy -> one_message_df$date
one_message_df$author_only <- str_detect(one_message_df$author_pub_field, " - ")
one_message_df$author <- one_message_df$author_pub_field %>%
str_extract("^(.*?) - ") %>% str_replace(" - ", "")
one_message_df$author <- ifelse(one_message_df$author_only == 1, one_message_df$author, one_message_df$author_pub_field)
one_message_df$publication <- one_message_df$author_pub_field %>%
str_extract(" - (.*?)$") %>% str_replace(" - ", "") %>%
str_replace(", [0-9]{4}$", "") %>% str_replace("^[0-9]{4}$", NA)
one_message_df$publication <- str_replace(one_message_df$publication, "^[0-9]{4}$", NA)
one_message_df$author_MIAs <- str_detect(one_message_df$author, "…")
one_message_df$author %>% str_replace("…", " \\.\\.\\.") -> one_message_df$author
one_message_df$pub_name_clipped <- one_message_df$publication %>% str_detect("…")
one_message_df$publication %>% str_replace("…", " \\.\\.\\.") -> one_message_df$publication
return(one_message_df)
うん、それは醜いだが、しかし、再び、私はコードを対話的に入力された場合、それが動作を約束します。誤ったバージョンのパッケージに関しては、RStudioのトレースバックによるとエラーが上になるようですが、私はgmailrパッケージからbody()またはmessage()関数を使用していると思います。 (はい、私はターミナルを介して幸せな結論にコードを試してみました。)助けてください、ああ誰でも、あなたは私の唯一の希望です。
あなたのパッケージをどのように正確に作成しましたか? NAMESPACEファイルには何が入っていますか?これらすべてのパッケージを「インポート」としてリストアップしましたか? – MrFlick
@ MrFlick ドロップダウンメニューから "New Project ..."オプションを使用してRStudio内からパッケージを開始しました。私はNAMESPACEファイルを開いたことさえしていないので、その中にその正規表現の行が1つしかありません。パッケージの.Rファイルの一番上にそのパッケージのリストがあるので、パッケージをロードするとロードされます。 – Ben
パッケージ内のコードに 'library()'文を入れてはいけません。あなたはNAMESPACEを別に設定するべきです。おそらくチェックアウト[Rパッケージを書く](http://r-pkgs.had.co.nz/)。また、最小限の*再現性を持たせるために、この例を減らすことはできませんか?まさにどの行がエラーを引き起こすか(エラーに直接関係しないものを削除する)? – MrFlick