Basic Connections & RSQLite
A Quick Run-Down
BB
Although there is fairly extensive documentation provided by R Core itself R Connections, I can find it a bit much to process at one time. Accordingly, I wanted to go over (some) of options for basic connections with base-R so I'd better understand what is available. This isn't all of them by any means both due to platform specific issues (I'm on Windows) and because also covering all the options for binary connections is somewhat redundant. I also mostly stay with examples provided by the R documentation.
Standard File Connections
There are a number of different modes for connections. Write, read, (some combination of both), or append are what you will mostly use. Again, note the separate options for binary.
- "r" or "rt" - Open for reading in text mode.
- "w" or "wt" - Open for writing in text mode.
- "a" or "at" -Open for appending in text mode.
- "rb" - Open for reading in binary mode.
- "wb"- Open for writing in binary mode.
- "ab" - Open for appending in binary mode.
- "r+", "r+b" - Open for reading and writing.
- "w+", "w+b" - Open for reading and writing, truncating file initially.
- "a+", "a+b" - Open for reading and appending.
Writing and reading text examples from R documentation with a few additional notes sprinkled in.
# Writing Text zz <- file("ex.data", "w") # open an output file connection cat("TITLE extra line", "2 3 5 7", "", "11 13 17", file = zz, sep = "\n") close(zz) zz <- file("ex.data", "r") # read-only mode cat("One more line\n", file = zz) # can't append
## Error in cat("One more line\n", file = zz): cannot write to this connection
zz <- file("ex.data", "a") cat("One more line\n", file = zz) close(zz) rm(zz) readLines("ex.data")
## [1] "TITLE extra line" "2 3 5 7" "" ## [4] "11 13 17" "One more line"
unlink("ex.data") # deletes file, nothing left
It's also possible to open a file for multiple options, as noted above...
## An example of a file open for reading and writing Tfile <- file("test1", "w+") c(isOpen(Tfile, "r"), isOpen(Tfile, "w")) # both TRUE
## [1] TRUE TRUE
cat("abc\ndef\n", file = Tfile) readLines(Tfile)
## [1] "abc" "def"
seek(Tfile, 0, rw = "r") # reset to beginning
## [1] 10
readLines(Tfile)
## [1] "abc" "def"
cat("ghi\n", file = Tfile) readLines(Tfile)
## [1] "ghi"
Tfile
## A connection with ## description "test1" ## class "file" ## mode "w+" ## text "text" ## opened "opened" ## can read "yes" ## can write "yes"
close(Tfile) Tfile
## A connection, specifically, 'file', but invalid.
unlink("test1") rm(Tfile) ## We can do the same thing with an anonymous file. Tfile <- file() cat("abc\ndef\n", file = Tfile) readLines(Tfile)
## [1] "abc" "def"
close(Tfile)
Text Connections
Another option is text connections...
"Text connections are another source of input. They allow R character vectors to be read as if the lines were being read from a text file. A text connection is created and opened by a call to textConnection
, which copies the current contents of the character vector to an internal buffer at the time of creation. Text connections can also be used to capture R output to a character vector...
zz <- textConnection(LETTERS) readLines(zz, 2)
## [1] "A" "B"
scan(zz, "", 4) # keeps the place...
## [1] "C" "D" "E" "F"
pushBack(c("aa", "bb"), zz) # literally throws it back.. scan(zz, "", 4)
## [1] "aa" "bb" "G" "H"
close(zz) rm(zz) zz <- textConnection("foo", "w") writeLines(c("testit1", "testit2"), zz) cat("testit3 ", file = zz) isIncomplete(zz)
## [1] TRUE
cat("testit4\n", file = zz) isIncomplete(zz)
## [1] FALSE
close(zz) foo
## [1] "testit1" "testit2" "testit3 testit4"
rm(foo,zz) ## test fixed-length strings zz <- file("testchar", "wb") x <- c("a", "this will be truncated", "abc") nc <- c(3, 10, 3) writeChar(x, zz, nc, eos = NULL)
## Warning in writeChar(x, zz, nc, eos = NULL): writeChar: more characters ## requested than are in the string - will zero-pad
writeChar(x, zz, eos = "\r\n") close(zz) zz <- file("testchar", "rb") readChar(zz, nc)
## [1] "a" "this will " "abc"
readChar(zz, nchar(x)+3) # need to read the terminator explicitly
## [1] "a\r\n" "this will be truncated\r\n" ## [3] "abc\r\n"
close(zz) unlink("testchar")
Compression
As the documentation "Choosing the type of compression involves tradeoffs: gzip, bzip2 and xz are successively less widely supported, need more resources for both compression and decompression, and achieve more compression (although individual files may buck the general trend). Typical experience is that bzip2 compression is 15% better on text files than gzip compression, and xz with maximal compression 30% better." notes, the .gz and .bz2 extensions are for compressed files. The space savings are trivial with small files, but obviously increase for larger files.
zz <- gzfile("ex.gz", "w") # compressed file cat("TITLE extra line", "2 3 5 7", "", "11 13 17", file = zz, sep = "\n") close(zz) file.size("ex.gz")
## [1] 55
readLines(zz <- gzfile("ex.gz"))
## [1] "TITLE extra line" "2 3 5 7" "" ## [4] "11 13 17"
close(zz) unlink("ex.gz") zz # an invalid connection
## A connection, specifically, 'gzfile', but invalid.
rm(zz) zz <- bzfile("ex.bz2", "w") # bzip2-ed file cat("TITLE extra line", "2 3 5 7", "", "11 13 17", file = zz, sep = "\n") close(zz) file.size("ex.bz2")
## [1] 77
zz # print() method: invalid connection
## A connection, specifically, 'bzfile', but invalid.
print(readLines(zz <- bzfile("ex.bz2")))
## [1] "TITLE extra line" "2 3 5 7" "" ## [4] "11 13 17"
close(zz) unlink("ex.bz2") rm(zz)
The difference is actually quite sizable with only a 30mb file "For write-mode connections, compress specifies how hard the compressor works to minimize the file size, and higher values need more CPU time and more working memory (up to ca 800Mb for xzfile(compress = 9)). For xzfile negative values of compress correspond to adding the xz argument -e: this takes more time (double?) to compress but may achieve (slightly) better compression. The default (6) has good compression and modest (100Mb memory) usage: but if you are using xz compression you are probably looking for high compression." , but obviously serious compression takes both time and computing horsepower.
x <- outer(1:2000,1:2000) object.size(x)
## 32000200 bytes
zz <- file("bigfile.data", "w") cat(x,file=zz) close(zz) file.size("bigfile.data")
## [1] 29072548
unlink("bigfile.data") rm(zz) zz <- gzfile("bigfile.gz", "w") cat(x,file=zz) close(zz) file.size("bigfile.gz")
## [1] 13187416
unlink("bigfile.gz") rm(zz) zz <- bzfile("bigfile.bz2", "w") cat(x,file=zz) close(zz) file.size("bigfile.bz2")
## [1] 11821782
unlink("bigfile.bz2") rm(zz)
URLs
It is also possible to uncompress data directly from a url, assuming it is in correct format, as the example provided by the R documentation illustrates.
## Uncompress a data file from a URL z <- gzcon(url("http://www.stats.ox.ac.uk/pub/datasets/csb/ch12.dat.gz")) # read.table can only read from a text-mode connection. raw <- textConnection(readLines(z)) close(z) dat <- read.table(raw) close(raw) dat[1:4, ]
## V1 V2 V3 V4 V5 V6 V7 ## 1 37 86 1 0 0 2 0 ## 2 61 77 1 0 0 4 0 ## 3 1084 75 1 0 0 3 1 ## 4 1092 77 1 0 1 2 1
Sockets
One interesting, perhaps trivial, example is using socket connections to communicate between two R processes (two separate R sessions) on the same computer. Note that this prompt a firewall warning or fail if you have certain ports locked down. Also, you will want to avoid using a port that may interfere with other processes (e.g., 80).
## Two R processes communicating via non-blocking sockets # R process 1 con1 <- socketConnection(port = 6011, server = TRUE) writeLines(LETTERS, con1) close(con1) # R process 2 con2 <- socketConnection(Sys.info()["nodename"], port = 6011) # as non-blocking, may need to loop for input readLines(con2) while(isIncomplete(con2)) { Sys.sleep(1) z <- readLines(con2) if(length(z)) print(z) } close(con2)
RSQLite
There are also a number of other CRAN packages that facilitate other types of connections as well. Here, I'll cover the RSQLite package (which really is mainly DBI) to connect to a SQLite database. Note that I want to cover web-based data connections separately as there is a fair amount to cover.
RSQLite is a very simple interface with a lot of functionality. As noted above, in order to use this package it is necessary to load the DBI package first as this is what does most of the heavy lifting.
library(DBI) library(RSQLite) datasetsDb()
## <SQLiteConnection> ## Path: C:\Users\Ben\Documents\R\win-library\3.4\RSQLite\db\datasets.sqlite ## Extensions: TRUE
db <- datasetsDb() class(db)
## [1] "SQLiteConnection" ## attr(,"package") ## [1] "RSQLite"
isS4(db)
## [1] TRUE
Krill Mueller, Hadley, and Co. were very considerate and included a bunch of data sets to play around with.
dbListTables(db)
## [1] "BOD" "CO2" "ChickWeight" ## [4] "DNase" "Formaldehyde" "Indometh" ## [7] "InsectSprays" "LifeCycleSavings" "Loblolly" ## [10] "Orange" "OrchardSprays" "PlantGrowth" ## [13] "Puromycin" "Theoph" "ToothGrowth" ## [16] "USArrests" "USJudgeRatings" "airquality" ## [19] "anscombe" "attenu" "attitude" ## [22] "cars" "chickwts" "esoph" ## [25] "faithful" "freeny" "infert" ## [28] "iris" "longley" "morley" ## [31] "mtcars" "npk" "pressure" ## [34] "quakes" "randu" "rock" ## [37] "sleep" "stackloss" "swiss" ## [40] "trees" "warpbreaks" "women"
head(dbReadTable(db,'mtcars'))
## row_names mpg cyl disp hp drat wt qsec vs am gear carb ## 1 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 ## 2 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 ## 3 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 ## 4 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 ## 5 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 ## 6 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
con <- dbConnect(SQLite()) dbWriteTable(con,'mtcars',mtcars) head(dbReadTable(con,'mtcars'))
## mpg cyl disp hp drat wt qsec vs am gear carb ## 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 ## 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 ## 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 ## 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 ## 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 ## 6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
In order to keep rownames, it is necessary to specify it as an argument. Also, take notice that either 'append' or 'overwrite' must be changed to 'TRUE'.
dbWriteTable(con,'mtcars',mtcars,row.names = TRUE, overwrite = TRUE) head(dbReadTable(con,'mtcars'))
## row_names mpg cyl disp hp drat wt qsec vs am gear carb ## 1 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 ## 2 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 ## 3 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 ## 4 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 ## 5 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 ## 6 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
You can both print the selected data on your console, or more usefully, save it to an R object. It will come out as a typical R data frame (but with stringsAsFactors = FALSE
).
bad_mileage <- dbGetQuery(con,"SELECT * FROM mtcars WHERE mpg < 15;") class(bad_mileage)
## [1] "data.frame"
rm(bad_mileage)
If you want to make any changes to the table then use dbExecute. Note that SQLite does not support dropping columns. You will need to create a new table if you want to do that or use another database (e.g., MySQL, POSTGRES, etc.). You, can, however, insert new values into it.
dbExecute(con, "INSERT INTO mtcars (row_names, mpg) VALUES ('BIG ASS TRUCK',5);")
## [1] 1
dbGetQuery(con,"SELECT * FROM mtcars WHERE mpg = 5;")
## row_names mpg cyl disp hp drat wt qsec vs am gear carb ## 1 BIG ASS TRUCK 5 NA NA NA NA NA NA NA NA NA NA
# Now delete the row. dbExecute(con, "DELETE FROM mtcars WHERE mpg = 5;")
## [1] 1
dbGetQuery(con,"SELECT * FROM mtcars WHERE mpg = 5;")
## [1] row_names mpg cyl disp hp drat wt ## [8] qsec vs am gear carb ## <0 rows> (or 0-length row.names)
# And finally, to disconnect.. dbDisconnect(con) # You can check the status of the connection with, dbisValid(con)
## Error in dbisValid(con): could not find function "dbisValid"
# Opps, forgot about 'db', better check that.. dbIsValid(db)
## [1] TRUE
dbDisconnect(db) rm(con,db)
Lastly, what if you want to read/write to a file?
# There may be another way to persist the .db file... con = dbConnect(SQLite()) dbWriteTable(con,'mtcars',mtcars,row.names = TRUE, overwrite = TRUE) sqliteCopyDatabase(con,'test.db') dbDisconnect(con) rm(con) con = dbConnect(SQLite(), dbname="./test.db") dbListTables(con)
## [1] "mtcars"
And that is really all there is to it. SQLite is a very simple, but powerful database. Vis a vis R, I think it is most useful when dealing with large data sets that won't easily fit in memory where the user can query a subset of the data at a time. Additionally, it could also serve as a backend for a Shiny app Persist Data in Shiny if again, the data set is large. I should note that the DBI package can connect with other DBs like MySQL and that there are even other packages that allow connections to NoSQL databases as well NoSQL for R.
Comments
2019-08-30 17:07:00
Work together
Hi Business Owner,
I wanted to find out if you have any loan needs at your business?
Yalber can quickly and easily customize a small business loan that works for your business, so you can get on with the business of building your bottom line.
Interested? Visit our website, Yalber look forward to working with you: https://www.perfectmedialab.com/getfunded
--
Vernia Huor
Business Development, Perfectmedialab
*Unsubscribe * : reply "remove"
2019-10-21 03:50:00
As a webmaster, do you feel so busy but empty and lonely?
We are running a campaign only for webmasters.
It provides an opportunity for you to release your emotions.
Largest Affair Site In The World
Over 30 Million Members
Costs Nothing To Join
==https://www.thelocation3.com/hookup ==
Regards,
Joanie Alcine
to unsubscribe, click
Here: https://www.thelocation3.com/unsubscribe
2019-12-19 16:02:00
Inquiry from San Diego
Hello,
My name is Reynolds from Perfectmedialab, and we partner with Gotorro to help small business grow.
Are you dissatisfied with the difficult loan application process?
Are you dissatisfied with a lengthy wait for a credit decision?
Do you think the process lacks transparency?
Gotorro offers easy access to fast, transparency and simply-priced small business loans to help you grow your business. The dedicated support staff ensure your total satisfaction
Take 5 minutes to apply, and get funds within 24 hours of approval: https://www.perfectmedialab.com/getfunds
Ross Reynolds
Company: Perfectmedialab
Address: 2448 Historic Decatur Rd #210, San Diego, CA 92106
Unsubscribe: https://www.perfectmedialab.com/unsubscribe
2020-02-19 14:27:00
Go Here To Review Our Service
Hi,
Thelocation3 is a website that collects opinions from webmasters/bloggers/business owners for Bing, Bluehost, etc.
We are looking for people like you to test our website.
They spend *,000,000,000 dollars each year collecting data, and then improving their products.
Thelocation3 pays to each member $ *** daily for their opinions.
Interested? Click here: https://www.thelocation3.com/paidsurvey
Looking forward to hearing from you,
Debbie Tanner
^^^^^^^^
Unsubscribe: https://www.thelocation3.com/unsubscribe
2020-06-16 12:14:00
Tadalafil 100mg Reviews https://bbuycialisss.com/ - Buy Cialis Keflex Instruction <a href=https://bbuycialisss.com/#>Buy Cialis</a> Efectos De Kamagra
2020-07-06 15:29:00
Zithromax Family SeneFewWeesk https://ascialis.com/# - Cialis Autown comprar cialis en estados unidos sahshibers <a href=https://ascialis.com/#>Cialis</a> Ralgaith Ship Fast Doxycycline
2020-08-28 23:37:00
Can Amoxicillin Eliminate Tooth Infection SeneFewWeesk https://biracialism.com/ - buying cialis online reviews Autown Kamagra Bristol sahshibers <a href=https://biracialism.com/#>Cialis</a> Ralgaith Without Prescription Metronidazole Tablets Uk
2020-10-17 17:14:00
Invite You to Review Fitness Coaching Service
Hi,
I am Caryn and the founder at THELOCATION3
I’m reaching out to you because we are looking for fitness enthusiasts like you to test Spazdiet online fitness coaching service.
Go here: https://www.thelocation3.com/bestbody to test the service.
Spazdiet has prepared a premium account for you, you can use it at no cost.
Thank you for your time,
Caryn Kover
^^^^^^^^
Unsubscribe: https://www.thelocation3.com/unsubscribe
2021-01-10 00:38:00
Medicament prescribing information. Effects of Drug Abuse. <a href="https://viagra4u.top">where to buy cheap viagra tablets</a> in USA. Some trends of medicine. Read information here.
<a href=http://productions.engelous.com/?page_id=2&cpage=8706#comment-435297>Some news about medicine.</a> <a href=https://honk-club.de/viewtopic.php?f=4&t=282692>Everything trends of medicines.</a> <a href=http://bpo.gov.mn/content/408>Actual trends of meds.</a> 47bc5_8
2022-01-27 10:54:00
Free submission of your new website to over 35 business directories here https://bit.ly/addyoursitehere
2022-01-30 17:59:00
Add your site to all 35 of our business directories with one click here-> https://bit.ly/addyoursitehere
2022-02-03 14:44:00
Give your new site a boost, submit your site now to our free directory and start getting more clients https://bit.ly/addyoursitehere
2022-02-23 18:10:00
Good job on the new site! Now go ahead and submit it to our free directory here https://bit.ly/submityoursite1000
2022-03-02 07:31:00
Add your site to 1000 business directories with one click here-> https://bit.ly/submityoursite1000
2022-03-07 05:50:00
Search and download over 1,216,186 unique blog articles at affordable rates. Buy ready-made blog articles from only $1!
Visit https://www.articlemarket.org to learn more
2022-03-09 10:07:00
Add your site to 1000 business directories with one click here-> https://1mdr.short.gy/submit-your-site
2022-03-19 09:46:00
Hello,
It is with sad regret to inform you that DataList.biz is shutting down. We have made all our databases available for you at a one-time fee.
You can visit us on DataList.biz
Regards.
Isla
2022-03-19 12:48:00
Submit your site to our 30 directories all with one click here> https://bit.ly/addyoursitehere
2022-03-19 12:51:00
Good job on the new site! Now go ahead and submit it to our free directory here https://bit.ly/addyoursitehere
2022-03-19 12:51:00
Give your new site a boost, submit your site now to our free directory and start getting more clients https://bit.ly/addyoursitehere
2022-03-22 22:01:00
Good job on the new site! Now go ahead and submit it to our free directory here https://bit.ly/addyoursitehere
2022-03-25 06:44:00
Free submission of your new website to over 35 business directories here https://bit.ly/addyoursitehere
2022-03-25 11:10:00
Add your site to all 35 of our business directories with one click here-> https://bit.ly/addyoursitehere
2022-03-25 11:52:00
Submit your site to our 30 directories all with one click here> https://bit.ly/addyoursitehere
2022-03-25 15:39:00
Hi there,
Have you ever wondered why new cryptocurrency tokens are always subject to insane price action?
We are giving away a totally free step-by-step guide on how you can profit from that with a front running bot.
Check out our new Youtube video to learn how to deploy your own bot without any coding experience:
https://www.youtube.com/watch?v=NYCG0JEEhvQ
Kind Regards,
Hannah
2022-03-30 07:27:00
I was wondering if you wanted to submit your new site to our free business directory? https://bit.ly/addyoursitehere
2022-04-02 09:22:00
You can submit your site to over 30 different business directories for free with one click https://bit.ly/addyoursitehere
2022-04-02 09:22:00
Add your site to all 35 of our business directories with one click here-> https://bit.ly/addyoursitehere
2022-04-02 13:08:00
Add your site to all 35 of our business directories with one click here-> https://bit.ly/addyoursitehere
2022-04-04 15:07:00
Submit your site to our 30 directories all with one click here> https://bit.ly/addyoursitehere
2022-04-07 16:30:00
I was wondering if you wanted to submit your new site to our free business directory? https://bit.ly/addyoursitehere
2022-04-10 06:49:00
Submit your site to our 30 directories all with one click here> https://bit.ly/addyoursitehere
2022-04-12 18:19:00
Hello.
We are offering Bullet Proof SMTP servers that never get suspended. Email as much as you want.
DMCA ignored, bulletproof locations, 100% uptime guaranteed, unlimited data transfer, and 24/7/365 support.
100 Spots available. BulletProofSMTP.org
2022-04-13 03:20:00
Good job on the new site! Now go ahead and submit it to our free directory here https://bit.ly/addyoursitehere
2022-04-13 07:46:00
Add your site to all 35 of our business directories with one click here-> https://bit.ly/addyoursitehere
2022-04-13 08:36:00
Good job on the new site! Now go ahead and submit it to our free directory here https://bit.ly/addyoursitehere
2022-04-18 05:54:00
www.81uv.com-915515538@qq.com天龙奇迹Mu低价私服开区
2022-04-18 16:48:00
ZippyLeads.org is running an easter special till the 18th of April.
Get all the leads you need for your company with our easter special.
2022-04-20 06:37:00
Hello.
It is with sad regret to inform you TopDataList.com is shutting down.
We have made all our databases available for you for a once off fee.
Visit us on TopDataList.com
2022-04-20 10:36:00
You can submit your site to over 30 different business directories for free with one click https://bit.ly/addyoursitehere
2022-04-20 17:53:00
Add your site to all 35 of our business directories with one click here-> https://bit.ly/addyoursitehere
2022-04-20 17:55:00
I was wondering if you wanted to submit your new site to our free business directory? https://bit.ly/addyoursitehere
2022-04-22 13:48:00
Add your site to all 35 of our business directories with one click here-> https://bit.ly/addyoursitehere
2022-04-25 09:53:00
Free submission of your new website to over 35 business directories here https://bit.ly/addyoursitehere
2022-04-26 04:37:00
Hi there,
Have you ever wondered why new tokens listed on Uniswap, Pancakeswap or any decentralized exchange are always subject to insane price volatility?
Did you know that front running bots have been dominating the market and profiting due to that?
Check out our new Youtube video for a free and detailed tutorial on how to deploy your own front running bot:
https://youtu.be/SQHFveYdjV8
Kind Regards,
Klaus
2022-04-28 07:24:00
Give your new site a boost, submit your site now to our free directory and start getting more clients https://bit.ly/addyoursitehere
2022-05-03 15:04:00
Good job on the new site! Now go ahead and submit it to our free directory here https://bit.ly/addyoursitehere
2022-05-05 18:50:00
Hello, from CustomData.shop we are a provider of unique databases that could help your business.
Please visit us at CustomData.shop to see if we can help you.
Regards,
Jackie
2022-05-06 10:51:00
Good job on the new site! Now go ahead and submit it to our free directory here https://bit.ly/addyoursitehere
2022-05-06 16:36:00
Give your new site a boost, submit your site now to our free directory and start getting more clients https://bit.ly/addyoursitehere
2022-05-06 18:00:00
You can submit your site to over 30 different business directories for free with one click https://bit.ly/addyoursitehere
2022-05-06 21:33:00
Give your new site a boost, submit your site now to our free directory and start getting more clients https://bit.ly/addyoursitehere
2022-05-06 21:42:00
Free submission of your new website to over 35 business directories here https://bit.ly/addyoursitehere
2022-05-13 11:57:00
I was wondering if you wanted to submit your new site to our free business directory? https://bit.ly/addyoursitehere
2022-05-16 11:33:00
Good job on the new site! Now go ahead and submit it to our free directory here https://bit.ly/addyoursitehere
2022-05-16 14:01:00
Submit your site to our 30 directories all with one click here> https://bit.ly/addyoursitehere
2022-05-16 15:17:00
You can submit your site to over 30 different business directories for free with one click https://bit.ly/addyoursitehere
2022-05-16 17:38:00
Give your new site a boost, submit your site now to our free directory and start getting more clients https://bit.ly/addyoursitehere
2022-05-21 07:10:00
You can submit your site to over 30 different business directories for free with one click https://bit.ly/addyoursitehere
2022-05-21 11:48:00
Give your new site a boost, submit your site now to our free directory and start getting more clients https://bit.ly/addyoursitehere
2022-05-21 11:48:00
Good job on the new site! Now go ahead and submit it to our free directory here https://bit.ly/addyoursitehere
2022-05-21 12:18:00
Add your site to all 35 of our business directories with one click here-> https://bit.ly/addyoursitehere
2022-05-21 14:26:00
Free submission of your new website to over 35 business directories here https://bit.ly/addyoursitehere
2022-05-22 15:02:00
Hi there,
Have you ever wondered why new tokens listed on Uniswap, Pancakeswap or any decentralized exchange are always subject to insane price volatility?
Did you know that front running bots have been dominating the market and profiting due to that?
Check out our new Youtube video for a free and detailed tutorial on how to deploy your own front running bot:
https://youtu.be/SQHFveYdjV8
Kind Regards,
Debbra
2022-05-25 17:47:00
Submit your site to our 30 directories all with one click here> https://bit.ly/addyoursitehere
2022-05-28 11:40:00
Add your site to all 35 of our business directories with one click here-> https://bit.ly/addyoursitehere
2022-05-28 13:42:00
Good job on the new site! Now go ahead and submit it to our free directory here https://bit.ly/addyoursitehere
2022-05-28 13:46:00
Good job on the new site! Now go ahead and submit it to our free directory here https://bit.ly/addyoursitehere
2022-05-28 14:26:00
You can submit your site to over 30 different business directories for free with one click https://bit.ly/addyoursitehere
2022-05-28 15:17:00
Good job on the new site! Now go ahead and submit it to our free directory here https://bit.ly/addyoursitehere
2022-06-01 16:29:00
Submit your site to our 30 directories all with one click here> https://bit.ly/addyoursitehere
2022-06-04 07:33:00
You can submit your site to over 30 different business directories for free with one click https://bit.ly/addyoursitehere
2022-06-04 11:23:00
I was wondering if you wanted to submit your new site to our free business directory? https://bit.ly/addyoursitehere
2022-06-04 11:29:00
You can submit your site to over 30 different business directories for free with one click https://bit.ly/addyoursitehere
2022-06-07 16:55:00
Free submission of your new website to over 35 business directories here https://bit.ly/addyoursitehere
2022-06-13 14:16:00
Submit your site to our 30 directories all with one click here> https://bit.ly/addyoursitehere
2022-06-13 19:28:00
Add your site to all 35 of our business directories with one click here-> https://bit.ly/addyoursitehere
2022-06-13 19:58:00
Give your new site a boost, submit your site now to our free directory and start getting more clients https://bit.ly/addyoursitehere
2022-06-15 15:36:00
I was wondering if you wanted to submit your new site to our free business directory? https://bit.ly/addyoursitehere
2022-06-18 12:03:00
Hi there,
Have you ever wondered why new tokens listed on Uniswap, Pancakeswap or any decentralized exchange are always subject to insane price volatility?
Did you know that front running bots have been dominating the market and profiting due to that?
Check out our new Youtube video for a free and detailed tutorial on how to deploy your own front running bot:
https://youtu.be/SQHFveYdjV8
Kind Regards,
Robt
2022-06-20 23:55:00
Submit your site to our 30 directories all with one click here> https://bit.ly/addyoursitehere
2022-06-22 12:30:00
Hello, did you know that there are 241,120 internet directories in the world.
These websites are what drive traffic to YOUR business.
Want more traffic? Want more Sales? We can help - today.
Your website raw-r.org is listed in only 88 of these directories.
Get more traffic for your Global audience.
Our automated system adds your website to all of the directories.
You can find it here: getlisted.directory/raw-r.org
Act today, and we will expedite your listings and waive the processing charge!
2022-06-22 17:49:00
You can submit your site to over 30 different business directories for free with one click https://bit.ly/addyoursitehere
2022-06-22 20:56:00
You can submit your site to over 30 different business directories for free with one click https://bit.ly/addyoursitehere
2022-06-22 21:46:00
Good job on the new site! Now go ahead and submit it to our free directory here https://bit.ly/addyoursitehere
2022-06-22 21:46:00
I was wondering if you wanted to submit your new site to our free business directory? https://bit.ly/addyoursitehere
2022-06-30 19:20:00
Submit your site to our 30 directories all with one click here> https://bit.ly/addyoursitehere
2022-06-30 22:12:00
Free submission of your new website to over 35 business directories here https://bit.ly/addyoursitehere
2022-06-30 22:57:00
I was wondering if you wanted to submit your new site to our free business directory? https://bit.ly/addyoursitehere
2022-07-02 04:41:00
You can submit your site to over 30 different business directories for free with one click https://bit.ly/addyoursitehere