<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" 
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
	<channel>
<title>R Language RSS Feed</title><link>http://www.esawdust.com/blog/index.html</link><description>R Language Recipies</description><dc:language>en</dc:language><dc:creator>landon@360vl.com</dc:creator><dc:rights>Copyright 2009 Landon Cox</dc:rights><dc:date>2009-09-17T15:31:57-06:00</dc:date><admin:generatorAgent rdf:resource="http://www.realmacsoftware.com/" />
<admin:errorReportsTo rdf:resource="mailto:landon@360vl.com" /><sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
<lastBuildDate>Thu, 17 Sep 2009 14:45:18 -0600</lastBuildDate><item><title>R - Accessing elements of a list from strsplit</title><dc:creator>landon@360vl.com</dc:creator><category>R Language</category><category>statistics</category><dc:date>2009-09-17T15:31:57-06:00</dc:date><link>http://www.esawdust.com/blog/blog/rlanguage/files/ElementsStrsplit.html#unique-entry-id-4</link><guid isPermaLink="true">http://www.esawdust.com/blog/blog/rlanguage/files/ElementsStrsplit.html#unique-entry-id-4</guid><content:encoded><![CDATA[<span style="font:13px Arial, Verdana, Helvetica, sans-serif; font-weight:bold; font-weight:bold; "><em>Scenario</em></span><span style="font:13px Arial, Verdana, Helvetica, sans-serif; "><em> - In order to extract certain parts of a string, it&rsquo;s useful to use the R strsplit function, but it returns a list and it&rsquo;s not immediately obvious how to access what you want in the list.  Here are some attempts followed by the solution.</em></span><span style="font:13px Arial, Verdana, Helvetica, sans-serif; "><br /><br /></span><script type="syntaxhighlighter" class="brush: plain"><![CDATA[
> test = c("1","2","3")
> typeof(test)
[1] "character"
> parts = strsplit("123","")
> typeof(parts)
[1] "list"

So, we're dealing with a list type from strsplit

> parts
[[1]]
[1] "1" "2" "3"

]]>
</script><span style="font:13px Arial, Verdana, Helvetica, sans-serif; "><br /><br />It's not clear how to access any aspect of the split list elements.<br /></span>
<script type="syntaxhighlighter" class="brush: plain"><![CDATA[
> parts[1]
[[1]]
[1] "1" "2" "3"

> parts[2]
[[1]]
NULL

> parts[[1]]
[1] "1" "2" "3"
]]>
</script><span style="font:13px Arial, Verdana, Helvetica, sans-serif; "><br /><br />Finally, stumble on the form needed to address an element of the split list:<br /><br /></span><script type="syntaxhighlighter" class="brush: plain"><![CDATA[
> parts[[1]][2]
[1] "2"
]]>
</script><span style="font:13px Arial, Verdana, Helvetica, sans-serif; "><br /></span>]]></content:encoded></item><item><title>R - Formatting R Dates from a log date/time stamp</title><dc:creator>landon@360vl.com</dc:creator><category>R Language</category><category>statistics</category><dc:date>2009-09-17T15:26:21-06:00</dc:date><link>http://www.esawdust.com/blog/blog/rlanguage/files/RFormatDates.html#unique-entry-id-3</link><guid isPermaLink="true">http://www.esawdust.com/blog/blog/rlanguage/files/RFormatDates.html#unique-entry-id-3</guid><content:encoded><![CDATA[<strong><em>Scenario</em></strong><em> - I have Snort IDS log data which has a date/time stamp that looks like this </em><strong><em>"Tue Sep 15 09:22:09 -0600 2009" </em></strong><em>I need to be able to turn the character string date/time stamp into an &ldquo;R&rdquo; Date object so I can do comparisons and subset extracts.</em><br /><br />Simple date conversions I have down, no problem: <br /><br /><script type="syntaxhighlighter" class="brush: plain"><![CDATA[

> adate = c("7/25/1959") 
> as.Date(adate,"%m/%d/%Y") 
[1] "1959-07-25" 
> 
]]>
</script>
<br />But when it comes to the type of date/time string format I have above, I can't figure out a format string that will work. <br /><br />The timezone offset is one part that causes problems. &nbsp;Building up to a working format string for the full time stamp string, I can make it as far as: <br /><br /><script type="syntaxhighlighter" class="brush: plain"><![CDATA[

> adate = c("Tue Sep 15 09:22:09 -0600 2009") 
> as.Date(adate,format="%a %b %d %H:%M:%S") 
[1] "2009-09-15" 

]]>
</script><br /><br />(apparently year defaults to current year when it's not specified in the format string). &nbsp;Because the Year comes after the timezone offset, I have to deal with the timezone offset in the format string. <br /><br />But when I get to the timezone offset value I can't use "%z" or "%Z" because those are "output only" <br /><br /><script type="syntaxhighlighter" class="brush: plain"><![CDATA[

> as.Date(adate,format="%a %b %d %H:%M:%S %z %Y") 
[1] NA 

]]>
</script>
<br />I'm close, but can't incorporate the timezone offset field in the date/time stamp string. <br /><br />What am I missing? &nbsp; Tweet me @esawdust with any suggestions for how to get around this problem with just the as.Date method.<br /><br />I suppose one workaround is to split the date/time string into its component parts, reassemble it into a string as.Date can deal with, but that seems to defeat one of the purposes of as.Date's format capability. <br /><br />Any advice for how to translate a "Tue Sep 15 09:22:09 -0600 2009" into an R Date object? <br /><br />[Update 9/18/09 - posted my question to the Nabble R-Help forum (which is great, BTW)]<br /><span style="font:13px Verdana, serif; font-weight:bold; font-weight:bold; "><br /></span><script type="syntaxhighlighter" class="brush: plain"><![CDATA[
Re: Simple as.Date question dealing with a timezone offset
by Gabor Grothendieck Sep 17, 2009; 06:48pm :


Using strapply() from the gsubfn package, apply the 
pattern (2nd arg) to string (1st arg). &nbsp; The matches 
to the back references (i.e. the portions of the pattern 
in parens) are passed to separate arguments of the 
These arguments are date, offset and year respectively. 
Then the function 
calculates the appropriate date/time. &nbsp;(If you wanted 
to ignore the offset or interpret it in some other way, 
particularly in relation to time zones, then change the 
function appropriately. Also the way its set up here it returns 
a chron object since as.chron.POSIXt specifically 
supports an offset= arg but you could change that. 
Dealing with time zones is tricky and it wasn't clear 
what you wanted precisely so you may have to fix 
that up.) 

library(gsubfn) 
library(chron) 

strapply(X = "Tue Sep 15 09:22:09 -0600 2009", 
&nbsp; &nbsp;pattern = "(.*:..) ([-0-9]+) ([0-9]+)$", 
&nbsp; &nbsp;FUN = function(date, offset, year) { 
&nbsp; &nbsp; &nbsp; &nbsp;p <- as.POSIXct(paste(date, year), 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;format = "%a %b %d %H:%M:%S %Y") 
&nbsp; &nbsp; &nbsp; &nbsp;as.chron(p, offset = as.numeric(offset)) 
&nbsp; &nbsp;}, 
&nbsp; &nbsp;simplify = c) 

See R News 4/1 for info on dates and times and 
http://gsubfn.googlecode.com&nbsp;for info on strapply. 

]]>
</script>
<br />This works out to be close - Kudos go to Gabor for the basic solution.  However there are some issues with the code as you will see in a bit.<br /><br />In order to use the gsubfn you have to first install the package:<br /><br /><script type="syntaxhighlighter" class="brush: plain"><![CDATA[

> install.packages("gsubfn", dependencies = TRUE)

]]>
</script><br /><br />after a fairly lengthy download with dependencies, you can run the R code:<br /><br /><script type="syntaxhighlighter" class="brush: plain"><![CDATA[

> strapply(X = "Tue Sep 15 09:22:09 -0600 2009", 
    pattern = "(.*:..) ([-0-9]+) ([0-9]+)$", 
    FUN = function(date, offset, year) { 
        p <- as.POSIXct(paste(date, year), 
                format = "%a %b %d %H:%M:%S %Y") 
        as.chron(p, offset = as.numeric(offset)) 
    }, 
    simplify = c)
[1] (08/21/09 15:22:09)

]]>
</script><br /><br />You can see the day from the result is 21 not 15 - this is because the offset used was 600 (hours) instead of 6 hours.  The fix is to interpret the offset value as a time in hours/minutes (some timezones are not on an even hour - but on a 1/2 hour for example.)  But for most timezone purposes, you can divide the offset by 100 and get the right offset.<br /><br />That offset fix (except for TZ&rsquo;s that live in a 1/2 hour offset - a case I don&rsquo;t have to worry about) looks like this:<br /><br /><script type="syntaxhighlighter" class="brush: plain"><![CDATA[

> strapply(X = "Tue Sep 15 09:22:09 -0600 2009", 
    pattern = "(.*:..) ([-0-9]+) ([0-9]+)$", 
    FUN = function(date, offset, year) { 
        offset = as.numeric(offset)/100
        p <- as.POSIXct(paste(date, year), 
                format = "%a %b %d %H:%M:%S %Y") 
        as.chron(p, offset ) 
    }, 
    simplify = c)
[1] (09/15/09 09:22:09)

]]>
</script><br /><br />Date is now correct, but the time seems odd - it&rsquo;s the same as given.   However, if I change the offset in the time stamp string, the resulting chron time also changes, so it&rsquo;s being used by as.chron as follows:<br /><br /><script type="syntaxhighlighter" class="brush: plain"><![CDATA[
> strapply(X = "Tue Sep 15 09:22:09 -0700 2009", 
+     pattern = "(.*:..) ([-0-9]+) ([0-9]+)$", 
+     FUN = function(date, offset, year) { 
+         offset = as.numeric(offset)/100
+         p <- as.POSIXct(paste(date, year), 
+                 format = "%a %b %d %H:%M:%S %Y") 
+         as.chron(p, offset ) 
+     }, 
+     simplify = c)
[1] (09/15/09 08:22:09)
]]>
</script>
<br />More playing with as.POSIXct and as.chron is in order to figure out what&rsquo;s going on.<br /><br />Get the current time on the system (which lives in the MDT TZ), as a time relative to GMT:<br /><br /><script type="syntaxhighlighter" class="brush: plain"><![CDATA[
> Sys.time()
[1] "2009-09-18 16:35:51 MDT"
> p <- as.POSIXlt(Sys.time(), "GMT")
> p
[1] "2009-09-18 22:35:59 GMT"
]]>
</script><br /><br />You can see these two times are 6 hours apart (local system is -6):<br /><br /><script type="syntaxhighlighter" class="brush: plain"><![CDATA[
> as.chron(p, -6)
[1] (09/18/09 16:35:59)
> 
]]>
</script>
<br />That generates the correct local time, so if the time is converted to GMT it works fine.  However, if you do the computation with another TZ,<br /><br /><script type="syntaxhighlighter" class="brush: plain"><![CDATA[
> p <- as.POSIXlt(Sys.time(), "")
> p
[1] "2009-09-19 07:27:42 MDT"

Leave p in mountain daylight:

> as.chron(p)
[1] (09/19/09 07:27:42)
> as.chron(p,-6)
[1] (09/19/09 01:27:42)
]]>
</script><br /><br />It&rsquo;s clear that as.chron is not internally using the timezone in the given time object, p.<br /><br />Other examples of &ldquo;R&rdquo; times not behaving well (at least according to the docs), if you look at the ISOdate() function, it takes a Timezone that&rsquo;s to be used in conversion.  It appears to be completely ignored as well, as the following examples show:<br /><br /><script type="syntaxhighlighter" class="brush: plain"><![CDATA[
> ISOdate(2009,9,25, 9, 22, 09, "MDT")
[1] "2009-09-25 09:22:09 UTC"
> ISOdate(2009,9,25, 9, 22, 09, tz="MDT")
[1] "2009-09-25 09:22:09 UTC"
> ISOdate(2009,9,25, 9, 22, 09, tz="UTC")
[1] "2009-09-25 09:22:09 UTC"
> ISOdate(2009,9,25, 9, 22, 09, tz="GMT")
[1] "2009-09-25 09:22:09 GMT"
> ISOdate(2009,9,25, 9, 22, 09, tz="PST")
[1] "2009-09-25 09:22:09 UTC"
> ISOdate(2009,9,25, 9, 22, 09, tz="")
[1] "2009-09-25 09:22:09 MDT"
]]>
</script><br /><br />At least this is a codeable solution to get Chron or DateTime class objects from a log timestamp like "<em>Tue Sep 15 09:22:09 -0600 2009</em>" if the time is first converted to GMT.  So, that&rsquo;s unfortunate, but is the reality.<br /><br />What&rsquo;s is nice I found is that it will work just as well on a collection of dates.  Say you created multiple dates in a collection:<br /><br /><script type="syntaxhighlighter" class="brush: plain"><![CDATA[

> dates = c("Tue Sep 15 09:22:09 -0600 2009", "Tue Sep 16 18:43:09 -0600 2009")
> dates
[1] "Tue Sep 15 09:22:09 -0600 2009" "Tue Sep 16 18:43:09 -0600 2009"

]]>
</script><br /><br />Then hand <em>strapply()</em> the dates vector instead of a literal string and it will convert both in the same call:<br /><br /><script type="syntaxhighlighter" class="brush: plain"><![CDATA[<br />
> strapply(X = dates, 
    pattern = "(.*:..) ([-0-9]+) ([0-9]+)$", 
    FUN = function(date, offset, year) { 
        p <- as.POSIXct(paste(date, year), 
                format = "%a %b %d %H:%M:%S %Y") 
        as.chron(p, offset = as.numeric(offset)) 
    }, 
    simplify = c)
[1] (08/21/09 15:22:09) (08/23/09 00:43:09)

]]>
</script>
<br /><strong><em>Summary</em></strong><br /><br />All told with the &ldquo;R&rdquo; date/time classes, my conclusion is this: <br /><br /><em>If you can do your date conversion in the data outside of &ldquo;R&rdquo; you are probably better off to convert the date in the data before import.  The &ldquo;R&rdquo; date/time classes are clunky and produce unexpected results in most cases except the simplest (pure GMT or local times, but arbitrary timezones are not well handled in &ldquo;R&rdquo;.)</em><br />]]></content:encoded></item><item><title>R - Showing a frequency table in a matrix format</title><dc:creator>landon@360vl.com</dc:creator><category>R Language</category><category>statistics</category><dc:date>2009-09-17T15:09:12-06:00</dc:date><link>http://www.esawdust.com/blog/blog/rlanguage/files/FrequencyMatrix.html#unique-entry-id-2</link><guid isPermaLink="true">http://www.esawdust.com/blog/blog/rlanguage/files/FrequencyMatrix.html#unique-entry-id-2</guid><content:encoded><![CDATA[<strong><em>Scenario</em></strong><em> - Attack types in Snort IDS, class types, are reported in the event logs.  To get a frequency analysis, after parsing the log data into &ldquo;R&rdquo;, I can extract the classtypes of all the log entries.  From that it&rsquo;s handy to get a frequency table showing how many times a particular classification of attack occurred.  But the output format is not very readable or easy to parse by other scripts.  This recipe shows how to dump a frequency table as a 2-column matrix.</em><span style="font:13px AndaleMono; "><br /></span><span style="font:13px AndaleMono; "><br /></span><pre class="brush: plain">
# lists the types of attacks found in the data - based on Classtype
> classtypes = factor( snortabbrev$Classtype )

> str(classtypes)
 Factor w/ 9 levels "","attempted-admin",..: 4 4 6 6 6 6 2 2 6 6 ...

> table(classtypes)
classtypes
                                  attempted-admin          attempted-recon           attempted-user            misc-activity              misc-attack 
                      18                       93                       35                       21                       30                       12 
 protocol-command-decode        unsuccessful-user web-application-activity 
                       2                        2                      287 

> as.matrix(table(classtypes))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [,1]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18
attempted-admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 93
attempted-recon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 35
attempted-user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 21
misc-activity&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30
misc-attack&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12
protocol-command-decode&nbsp;&nbsp;&nbsp;&nbsp; 2
unsuccessful-user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2
web-application-activity&nbsp; 287

Works just as well with a summary command

> as.matrix(summary(classtypes))
                         [,1]
                           18
attempted-admin            93
attempted-recon            35
attempted-user             21
misc-activity              30
misc-attack                12
protocol-command-decode     2
unsuccessful-user           2
web-application-activity  287
</pre>]]></content:encoded></item><item><title>R - Extracting all Factors except empty element &#x22;&#x22;</title><dc:creator>landon@360vl.com</dc:creator><category>R Language</category><category>statistics</category><dc:date>2009-09-17T15:00:22-06:00</dc:date><link>http://www.esawdust.com/blog/blog/rlanguage/files/ExtractingNoEmpty.html#unique-entry-id-1</link><guid isPermaLink="true">http://www.esawdust.com/blog/blog/rlanguage/files/ExtractingNoEmpty.html#unique-entry-id-1</guid><content:encoded><![CDATA[<strong><em>Scenario</em></strong><em>: In a project I&rsquo;m working on, there are security attacks shown in system logs.  As part of the log data, snort alerts, there is a class type which is the general category or classification of an attack.   In some cases, the attack type is apparently unknown and comes out as an &ldquo;empty&rdquo;.  There are times I want to see everything but the unknown attack types.<br /><br /></em><pre class="brush: plain">

# lists the types of attacks found in the data - based on Classtype
classtypes = factor( snortabbrev$Classtype )

some factors come back with an empty element such as:

> levels(classtypes)
[1] ""&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "attempted-admin"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "attempted-recon"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "attempted-user"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "misc-activity"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "misc-attack"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "protocol-command-decode"
[8] "unsuccessful-user"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "web-application-activity"
> as.matrix(levels(classtypes))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [,1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;[1,] ""&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;[2,] "attempted-admin"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;[3,] "attempted-recon"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;[4,] "attempted-user"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;[5,] "misc-activity"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;[6,] "misc-attack"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;[7,] "protocol-command-decode"
&nbsp;[8,] "unsuccessful-user"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;[9,] "web-application-activity"
>

Here's how to get rid of the "" if you don't want to consider it:

> levels(classtypes) != ""
[1] FALSE&nbsp; TRUE&nbsp; TRUE&nbsp; TRUE&nbsp; TRUE&nbsp; TRUE&nbsp; TRUE&nbsp; TRUE&nbsp; TRUE
> classtypes_culled = levels(classtypes)[ levels(classtypes) != ""]
[1] "attempted-admin"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "attempted-recon"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "attempted-user"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "misc-activity"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "misc-attack"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "protocol-command-decode"&nbsp; "unsuccessful-user"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
[8] "web-application-activity"
>&nbsp;

> as.matrix( classtypes_culled )
&nbsp;&nbsp;&nbsp;&nbsp; [,1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
[1,] "attempted-admin"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
[2,] "attempted-recon"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
[3,] "attempted-user"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
[4,] "misc-activity"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
[5,] "misc-attack"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
[6,] "protocol-command-decode"
[7,] "unsuccessful-user"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
[8,] "web-application-activity"
>&nbsp;

</pre>]]></content:encoded></item><item><title>R Language Recipes</title><dc:creator>landon@360vl.com</dc:creator><category>R Language</category><category>statistics</category><dc:date>2009-09-17T14:45:40-06:00</dc:date><link>http://www.esawdust.com/blog/blog/rlanguage/files/RLangRecipesIntro.html#unique-entry-id-0</link><guid isPermaLink="true">http://www.esawdust.com/blog/blog/rlanguage/files/RLangRecipesIntro.html#unique-entry-id-0</guid><content:encoded><![CDATA[<strong><em>Synopsis</em></strong><em> - I started this R Language Recipes section of the site because I am learning &ldquo;R&rdquo; - a very powerful, open source language for statistical number crunching.  I&rsquo;m also reviewing the manuscript &ldquo;R in Action&rdquo; - an upcoming book from Manning Publications and so I&rsquo;m learning the language through that exercise as well.   <br /><br />Even as a career software developer, there are things about the R language which are not obvious.  In the process of stumbling onto solutions, I want to save what I&rsquo;m learning.  These are little recipes I&rsquo;ve learned the hard way and don&rsquo;t want to have to look up again or figure out when I need them again.  So, this is my stash of &ldquo;R&rdquo; recipes or phrases.  If you get something from them, great, otherwise, I just needed a place for reference and notes.  </em>]]></content:encoded></item></channel>
</rss>
