11

Twitter の検索結果をデータベース (SQL Server) に保存する作業を行っていますが、twitteR から検索結果を取得するとエラーが発生します。

私が実行した場合:

library(twitteR)
puppy <- as.data.frame(searchTwitter("puppy", session=getCurlHandle(),num=100))

次のエラーが表示されます。

Error in as.data.frame.default(x[[i]], optional = TRUE) : 
  cannot coerce class structure("status", package = "twitteR") into a data.frame

RODBC を使用して sqlSave を使用してこれをテーブルに追加するには、data.frame である必要があるため、これは重要です。少なくともそれは私が得たエラーメッセージです:

Error in sqlSave(localSQLServer, puppy, tablename = "puppy_staging",  : 
  should be a data frame

リストをdata.frameに強制する方法、またはRODBCを介してリストをロードする方法について誰か提案がありますか?

最終的な目標は、searchTwitter によって返される値の構造を反映したテーブルを作成することです。取得してロードしようとしているものの例を次に示します。

library(twitteR)
puppy <- searchTwitter("puppy", session=getCurlHandle(),num=2)
str(puppy)

List of 2
 $ :Formal class 'status' [package "twitteR"] with 10 slots
  .. ..@ text        : chr "beautifull and  kc reg Beagle Mix for rehomes: This little puppy is looking for a new loving family wh... http://bit.ly/9stN7V "| __truncated__
  .. ..@ favorited   : logi FALSE
  .. ..@ replyToSN   : chr(0) 
  .. ..@ created     : chr "Wed, 16 Jun 2010 19:04:03 +0000"
  .. ..@ truncated   : logi FALSE
  .. ..@ replyToSID  : num(0) 
  .. ..@ id          : num 1.63e+10
  .. ..@ replyToUID  : num(0) 
  .. ..@ statusSource: chr "&lt;a href=&quot;http://twitterfeed.com&quot; rel=&quot;nofollow&quot;&gt;twitterfeed&lt;/a&gt;"
  .. ..@ screenName  : chr "puppy_ads"
 $ :Formal class 'status' [package "twitteR"] with 10 slots
  .. ..@ text        : chr "the cutest puppy followed me on my walk, my grandma won't let me keep it. taking it to the pound sadface"
  .. ..@ favorited   : logi FALSE
  .. ..@ replyToSN   : chr(0) 
  .. ..@ created     : chr "Wed, 16 Jun 2010 19:04:01 +0000"
  .. ..@ truncated   : logi FALSE
  .. ..@ replyToSID  : num(0) 
  .. ..@ id          : num 1.63e+10
  .. ..@ replyToUID  : num(0) 
  .. ..@ statusSource: chr "&lt;a href=&quot;http://blackberry.com/twitter&quot; rel=&quot;nofollow&quot;&gt;Twitter for BlackBerry®&lt;/a&gt;"
  .. ..@ screenName  : chr "iamsweaters"

したがって、子犬の data.frame には次のような列名が必要だと思います。

- text
- favorited
- replytoSN
- created
- truncated
- replytoSID
- id
- replytoUID
- statusSource
- screenName
4

6 に答える 6

18

少し前にhttp://blog.ouseful.info/2011/11/09/getting-started-with-twitter-analysis-in-r/から見つけたこのコードを使用します。

#get data
tws<-searchTwitter('#keyword',n=10)

#make data frame
df <- do.call("rbind", lapply(tws, as.data.frame))

#write to csv file (or your RODBC code)
write.csv(df,file="twitterList.csv")
于 2011-12-08T15:07:40.660 に答える
7

これが古い質問であることは承知していますが、それでも、これを解決するための「現代的な」バージョンであると私が考えるものを次に示します。関数を使うだけtwListToDf

gvegayon <- getUser("gvegayon")
timeline <- userTimeline(gvegayon,n=400)
tl <- twListToDF(timeline)

それが役に立てば幸い

于 2015-05-24T20:27:03.380 に答える
3

これを試して:

ldply(searchTwitter("#rstats", n=100), text)

twitteR は S4 クラスを返すため、そのヘルパー関数の 1 つを使用するか、そのスロットを直接処理する必要があります。unclass()たとえば、 を使用してスロットを表示できます。

unclass(searchTwitter("#rstats", n=100)[[1]])

これらのスロットには、上記のように、関連する関数を使用して直接アクセスできます (twitteR ヘルプ: ?statusSource から):

 text Returns the text of the status
 favorited Returns the favorited information for the status
 replyToSN Returns the replyToSN slot for this status
 created Retrieves the creation time of this status
 truncated Returns the truncated information for this status
 replyToSID Returns the replyToSID slot for this status
 id Returns the id of this status
 replyToUID Returns the replyToUID slot for this status
 statusSource Returns the status source for this status

前述したように、出力でこれらの各フィールドを自分で指定する必要があることは理解しています。2 つのフィールドを使用した例を次に示します。

> head(ldply(searchTwitter("#rstats", n=100), 
        function(x) data.frame(text=text(x), favorited=favorited(x))))
                                                                                                                                          text
1                                                     @statalgo how does that actually work? does it share mem between #rstats and postgresql?
2                                   @jaredlander Have you looked at PL/R? You can call #rstats from PostgreSQL: http://www.joeconway.com/plr/.
3   @CMastication I was hoping for a cool way to keep data in a DB and run the normal #rstats off that. Maybe a translator from R to SQL code.
4                     The distribution of online data usage: AT&amp;T has recently announced it will no longer http://goo.gl/fb/eTywd #rstat
5 @jaredlander not that I know of. Closest is sqldf package which allows #rstats and sqlite to share mem so transferring from DB to df is fast
6 @CMastication Can #rstats run on data in a DB?Not loading it in2 a dataframe or running SQL cmds but treating the DB as if it wr a dataframe
  favorited
1     FALSE
2     FALSE
3     FALSE
4     FALSE
5     FALSE
6     FALSE

頻繁に実行する場合は、これを関数に変えることができます。

于 2010-06-16T18:39:34.680 に答える
1

私がしたのと同じ問題に遭遇した人のために、それはエラーを言っていました

Error in as.double(y) : cannot coerce type 'S4' to vector of type 'double' 

単語のテキストを変更しただけです

ldply(searchTwitter("#rstats", n=100), text) 

次のようにstatusTextに:

ldply(searchTwitter("#rstats", n=100), statusText)

ただフレンドリーなヘッズアップ:P

于 2012-12-04T04:38:51.133 に答える
0

これを DF に変換する便利な関数を次に示します。

TweetFrame<-function(searchTerm, maxTweets)
{
  tweetList<-searchTwitter(searchTerm,n=maxTweets)
  return(do.call("rbind",lapply(tweetList,as.data.frame)))
}

次のように使用します。

tweets <- TweetFrame(" ", n)
于 2016-10-15T06:08:34.977 に答える