If you are familiar with cowsay
on the cli, then you know what this
is, but for R. If not, read below. Why? Why not?
- Amanda Dobbyn
- Andreas Brandmaier
- Andy Teucher
- Carson Sievert
- David Schoch
- Franz-Sebastian Krah
- Guangchuang Yu
- Karl Broman
- Kiyoko Gotanda
- Lucy D’Agostino McGowan
- Marion Louveaux
- Noam Ross
- Paolo Sonego
- Philipp Boersch-Supan
- Rich FitzJohn
- Scott Chamberlain
- Thomas Leeper
- Tyler Rinker
That’s right, it takes 18 people to make cowsay
- it’s that hard.
See CONTRIBUTING.md
Sources to look in:
- https://asciiart.website/ - again, this person only collects them - no mention of license, permissions, etc.
Permissions
In the ascii art mailing list https://groups.google.com/forum/#!forum/alt.ascii-art they say:
As for posting other people's ASCII art,
after a discussion in news:alt.ascii-art _ ___
the following rules were agreed upon: #_~`--'__ `===-,
1. If an ASCII ART picture has initials `.`. `#.,//
on it, leave them on when posting it ,_\_\ ## #\
2. If an ASCII ART picture doesn't have `__.__ `####\
initials on it, mention that you ~~\ ,###'~
didn't draw it when posting it. \##'
3. If somebody posts a picture without [nosig]
initials and you have an original copy
with initials on, feel free to re-post the original version.
* The re-post ought not to be taken personally, as we all
know that ASCII art often loses proper credits.
Responses to the re-post are not necessary.
One contributor, name of Krogg, suggested the following:
1.) Ultra polite:...ya make yer own ascii and use it.
2.) Very polite:...Ya contact the author and ask if ya
can use it...
3.) polite:...Ya use it but you keep the Credits
in there like they should be.
4.) rude:...Ya use it and strip credits.
5.) Very rude:...Ya use it and claim that it Is
_Your_ very own creation...
So, let’s go with this rule: Let’s include found (on the web) ascii art
in this pkg, include signature if there, and if no signature, put in a
[nosig]
(see above).
Asciicast: https://asciinema.org/a/7745
From CRAN
install.packages("cowsay")
Dev version
remotes::install_github("sckott/cowsay")
library("cowsay")
sort(names(animals))
#> [1] "alligator" "ant" "anxiouscat" "bat" "bat2"
#> [6] "behindcat" "bigcat" "buffalo" "cat" "chicken"
#> [11] "chuck" "clippy" "cow" "daemon" "duck"
#> [16] "duckling" "egret" "endlesshorse" "facecat" "fish"
#> [21] "frog" "ghost" "goldfish" "grumpycat" "hypnotoad"
#> [26] "longcat" "longtailcat" "monkey" "mushroom" "owl"
#> [31] "pig" "poop" "pumpkin" "rabbit" "shark"
#> [36] "shortcat" "signbunny" "smallcat" "snowman" "spider"
#> [41] "squirrel" "squirrel2" "stegosaurus" "stretchycat" "trilobite"
#> [46] "turkey" "whale" "wolf" "yoda"
say('time')
#>
#> --------------
#> 2024-10-11 09:45:13.793342
#> --------------
#> \
#> \
#> \
#> |\___/|
#> ==) ^Y^ (==
#> \ ^ /
#> )=*=(
#> / \
#> | |
#> /| | | |\
#> \| | |_|/\
#> jgs //_// ___/
#> \_)
#>
say("ain't that some shit", "chicken")
#>
#> -----
#> ain't that some shit
#> ------
#> \
#> \
#> _
#> _/ }
#> `>' \
#> `| \
#> | /'-. .-.
#> \' ';`--' .'
#> \'. `'-./
#> '.`-..-;`
#> `;-..'
#> _| _|
#> /` /` [nosig]
#>
Add some color:
library(crayon)
say("boo!", "ghost",
what_color = "cyan", by_color = "saddlebrown")
say("I love hooo you are!", "owl",
what_color = rgb(0, 1, 1), by_color = "#FF0000")
String styles together crayon-style:
say(what = "rms", by = "rms",
what_color = yellow$bgMagenta$bold,
by_color = cyan$italic)
This doesn’t preclude you from adding extra crayon colors to your what
string directly.
say(what = paste0("hello ", crayon::yellow("there "), crayon::underline("world")),
by = "trilobite",
what_color = bgBlue$cyan$italic,
by_color = "thistle") # Don't ask me why "thistle" is pink/purple
say("hell no!")
#>
#> --------------
#> hell no!
#> --------------
#> \
#> \
#> \
#> |\___/|
#> ==) ^Y^ (==
#> \ ^ /
#> )=*=(
#> / \
#> | |
#> /| | | |\
#> \| | |_|/\
#> jgs //_// ___/
#> \_)
#>
say("hell no!", type="warning")
#> Warning in say("hell no!", type = "warning"):
#> --------------
#> hell no!
#> --------------
#> \
#> \
#> \
#> |\___/|
#> ==) ^Y^ (==
#> \ ^ /
#> )=*=(
#> / \
#> | |
#> /| | | |\
#> \| | |_|/\
#> jgs //_// ___/
#> \_)
#>
say("hell no!", type="string")
#> [1] "\n -------------- \nhell no! \n --------------\n \\\n \\\n \\\n |\\___/|\n ==) ^Y^ (==\n \\ ^ /\n )=*=(\n / \\\n | |\n /| | | |\\\n \\| | |_|/\\\n jgs //_// ___/\n \\_)\n "
From the catfacts API at https://catfact.ninja
say("catfact", "cat")
#> --------------
#> When a domestic cat goes after mice, about 1 pounce in 3 results in a catch.
#> --------------
#> \
#> \
#> \
#> |\___/|
#> ==) ^Y^ (==
#> \ ^ /
#> )=*=(
#> / \
#> | |
#> /| | | |\
#> \| | |_|/\
#> jgs //_// ___/
#> \_)
From the a Boing Boing tweet on 2014-05-10 “twitter.com/BoingBoing/status/465170473194512384” (post may be gone)
say("it's caturday", "longcat")
#>
#> -----
#> it's caturday
#> ------
#> \
#> \
#> .ハ,,ハ
#> ( ゚ω゚)
#> |つ つ
#> | |
#> | |
#> | |
#> | |
#> | |
#> | |
#> | |
#> | |
#> | |
#> | |
#> | |
#> | |
#> | |
#> | |
#> | |
#> | |
#> | |
#> | |
#> U " U
#> [BoingBoing]
#>
say('NO!', by='grumpycat')
#>
#> --------------
#> NO!
#> --------------
#> \
#> \
#> \
#> ハ _ ハ
#> ಠ X ಠ
#>
say('WOKE UP TODAY, IT WAS TERRIBLE', by='grumpycat')
#>
#> --------------
#> WOKE UP TODAY, IT WAS TERRIBLE
#> --------------
#> \
#> \
#> \
#> ハ _ ハ
#> ಠ X ಠ
#>
say('I HAD FUN ONCE, IT WAS AWFUL', by='grumpycat')
#>
#> --------------
#> I HAD FUN ONCE, IT WAS AWFUL
#> --------------
#> \
#> \
#> \
#> ハ _ ハ
#> ಠ X ಠ
#>
say(by='signbunny')
#>
#> --------------
#> Hello world!
#> --------------
#> (\__/) ||
#> (•ㅅ•) ||
#> / づ
#> [nosig]
#>
say(by='fish')
#>
#> -----
#> Hello world!
#> ------
#> \
#> \
#> ><((((º> ><((((º> ><((((º> ><((((º> ><((((º>
#> Kiyoko Gotanda
#>
say('fortune','cat')
#>
#> --------------
#> If the answer is parse() you should usually rethink the question.
#> Thomas Lumley
#> R-help
#> February 2005
#> --------------
#> \
#> \
#> \
#> |\___/|
#> ==) ^Y^ (==
#> \ ^ /
#> )=*=(
#> / \
#> | |
#> /| | | |\
#> \| | |_|/\
#> jgs //_// ___/
#> \_)
#>
You can also pick a particular fortune by number or regex search - if
the fortune
parameter is not NULL
you don’t have pass anything to
the what
parameter (the 1st parameter)
say(fortune=100)
#>
#> --------------
#> I'm not sure I'd trust any computer recommendation from 1976, no matter how famous the authors are.
#> Peter Dalgaard
#> after Samuel Edward Kemp cited a recommendation about nonlinear least squares computer programs from 'Box-Jenkins, 1976'
#> R-help
#> January 2005
#> --------------
#> \
#> \
#> \
#> |\___/|
#> ==) ^Y^ (==
#> \ ^ /
#> )=*=(
#> / \
#> | |
#> /| | | |\
#> \| | |_|/\
#> jgs //_// ___/
#> \_)
#>
say(fortune='whatever')
#>
#> --------------
#> Tom Backer Johnsen: I have just started looking at R, and are getting more and more irritated at myself for not having done that before. However, one of the things I have not found in the documentation is some way of preparing output from R for convenient formatting into something like MS Word.
#> Barry Rowlingson: Well whatever you do, don't start looking at LaTeX, because that will get you even more irritated at yourself for not having done it before.
#> Tom Backer Johnsen and Barry Rowlingson
#> R-help
#> February 2006
#> --------------
#> \
#> \
#> \
#> |\___/|
#> ==) ^Y^ (==
#> \ ^ /
#> )=*=(
#> / \
#> | |
#> /| | | |\
#> \| | |_|/\
#> jgs //_// ___/
#> \_)
#>
say("Hi there :)", by='trilobite')
#>
#> --------------
#> Hi there :)
#> --------------
#> \
#> \
#> \
#> _____
#> .'` ,-. `'.
#> / ([ ]) \
#> /.-""`(`)`""-.\
#> <'```(.)```'>
#> <'```(.)```'>
#> <'``(.)``'>
#> sk <``\_/``>
#> `'---'`
#>
say('Q: What do you call a solitary shark\nA: A lone shark', by='shark')
#>
#> --------------
#> Q: What do you call a solitary shark
#> A: A lone shark
#> --------------
#> \
#> \
#> \
#> /""-._
#> . '-,
#> : '',
#> ; * '.
#> ' * () '.
#> \ \
#> \ _.---.._ '.
#> : .' _.--''-'' \ ,'
#> .._ '/.' . ;
#> ; `-. , \'
#> ; `, ; ._\
#> ; \ _,-' ''--._
#> : \_,-' '-._
#> \ ,-' . '-._
#> .' __.-''; \...,__ '.
#> .' _,-' \ \ ''--.,__ '\
#> / _,--' ; \ ; \^.}
#> ;_,-' ) \ )\ ) ;
#> / \/ \_.,-' ;
#> / ;
#> ,-' _,-'''-. ,-., ; PFA
#> ,-' _.-' \ / |/'-._...--'
#> :--`` )/
#> '
#>
say('Q: What do you call a single buffalo?\nA: A buffalonely', by='buffalo')
#>
#> --------------
#> Q: What do you call a single buffalo?
#> A: A buffalonely
#> --------------
#> \
#> \
#> \
#> _.-````'-,_
#> _,.,_ ,-'` `'-.,_
#> /) ( '``-.
#> (( ) ) `\
#> \) (_/ )\
#> | /) ' ,' / \
#> `\ ^' ' ( / ))
#> | _/\ , / ,,`\ ( "`
#> \Y, | \ \ | ````| / \_ \
#> `)_/ \ \ ) ( > ( >
#> \( \( |/ |/
#> mic & dwb /_(/_( /_( /_(
#>
say(fortune=59, by="clippy")
#>
#>
#> -----
#> Let's not kid ourselves: the most widely used piece of software for statistics is Excel.
#> Brian D. Ripley
#> 'Statistical Methods Need Software: A View of Statistical Computing'
#> Opening lecture RSS 2002, Plymouth
#> September 2002
#> ------
#> \
#> \ __
#> / \
#> | |
#> @ @
#> || ||
#> || ||
#> |\_/|
#> \___/ GB
say("fortune", by = "yoda")
say("hi, i'm a bat", by="bat")
#>
#> -------------
#> hi, i'm a bat
#> --------------
#> \
#> \
#> \
#> __.--'\ \.__./ /'--.__
#> _.-' '.__.' '.__.' '-._
#> .' '.
#> / \
#> | |
#> | |
#> \ .---. .---. /
#> '._ .' '.''. .''.' '. _.'
#> '-./ \ / \.-'
#> ''mrf
See also bat2
say("fortune", by = "monkey")
#>
#> -------------
#> When a Certain Guru rips strips off people (God knows he's done it to me often enough) on this list, there's a damned good reason for it.
#> Rolf Turner
#> in a discussion about whether a friendly mailing list with more 'customer service' attitude than R-help was needed
#> R-help
#> December 2003
#> --------------
#> \
#> \
#> \
#>
#> .="=.
#> _/.-.-.\_ _
#> ( ( o o ) ) ))
#> |/ " \| //
#> \'---'/ //
#> jgs /`"""`\\ ((
#> / /_,_\ \\ \\
#> \_\_'__/ \ ))
#> /` /`~\ |//
#> / / \ /
#> ,--`,--'\/\ /
#> '-- "--' '--'
say("fortune", by = "daemon")
#>
#> -----
#> You might also consider a more informative subject line. "Help needed" is true for all questions (not answers) on R-help. Just think, why is this list called R-***help***?
#> Peter Ehlers
#> after answering a help request
#> R-help
#> April 2011
#> ------
#> \
#> \
#> \
#> , ,
#> /( )`
#> \ \___ / |
#> /- _ `-/ '
#> (/\/ \ \ /\
#> / / | `
#> O O ) / |
#> `-^--'`< '
#> (_.) _ ) /
#> `.___/` /
#> `-----' /
#> <----. __ / __ \
#> <----|====O)))==) \) /====
#> <----' `--' `.__,' \
#> | |
#> \ /
#> ______( (_ / \______
#> ,' ,-----' | \
#> `--{__________) \/ [nosig]
say("je ne regrette rien", by = "egret")
#>
#> -----
#> je ne regrette rien
#> ------
#> \
#> \
#> \
#> \ _,
#> -==<' `
#> ) /
#> / (_.
#> | ,-,`\
#> \\ \ \
#> `\, \ \
#> ||\ \`|,
#> jgs _|| `=`-'
#> ~~`~`
See also bat2
endless_horse()
## -----
## Hello world!
## ------
## \
## \
## \
## ,
## _,,)\.~,,._
## (()` ``)\))),,_
## | \ ''((\)))),,_ ____
## |6` | ''((\())) "-.____.-" `-.-,
## | .'\ ''))))' \)))
## | | `. '' ((((
## \, _) \/ |))))
## `' | (((((
## \ | ))))))
## `| | ,\ /((((((
## | / `-.______.< \ | )))))
## | | / `. \ \ ((((
## | / \ | `.\ | (((
## \ | | | )| | ))
## | | | | || | ' [endless.horse]
## | | | | || |
##
## | | | | || |
## | | | | || |
## | | | | || |
## | | | | || |
## | | | | || |
## | | | | || |
## | | | | || |
## | | | | || |
## | | | | || |
## | | | | || |
library("magrittr")
"I HAD FUN ONCE, IT WAS AWFUL" %>% say('grumpycat')
#>
#> --------------
#> I HAD FUN ONCE, IT WAS AWFUL
#> --------------
#> \
#> \
#> \
#> ハ _ ハ
#> ಠ X ಠ
#>
Okay, hold your endless horses. Just use the exported vector animals
,
and you can select the animal you want by name.
animals['clippy']
#> clippy
#> "\n\n ----- \n%s \n ------ \n \\ \n \\ __\n / \\\n | |\n @ @\n || ||\n || ||\n |\\_/|\n \\___/ GB\n"
- License: MIT
- Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.