The split infinitive: the final frontier
[This post was published previously on Rpubs on Feb. 16th, 2016. This is an updated version.]
To split or to not split
My linguistics students asked me if the split infinitive had been invented by Star Trek’s Captain Kirk. The famous line “To boldly go where no man has ever gone before” was part of the original Star Trek opening credit sequence from 1966 onwards.
Here is the full script:
Space: The final frontier
These are the voyages of the Starship, Enterprise
Its 5-year mission
To explore strange new worlds
To seek out new life and new civilizations
To boldly go where no man has gone before.
The insertion of the adverb boldly between the marker to and the verb go caused quite a stir among prescriptivists at the time (ironically, the sexism of “no man” caused no such uproar). This usage is still branded as incorrect.
‘To split’ means to divide a complex compound into separate entities (as in “the river Seine splits Paris in two” or “the scientist broke down a molecule into its atomic constituents”). Merriam-Webster’s Dictionary has an entry dedicated to the split infinitive:
4: to separate (the parts of a whole) by interposing something <split an infinitive>
Arguing against splitting an infinitive makes sense in the context of Latin languages. For instance, no one would ever think of splitting the one-word infinitive verb aller ‘go’ in French into al and ler. But in a Germanic language like English, to go is not a one-word verbal unit but the pairing of a former spatial preposition and the base form of a verb separated by a space. When there is a space there is a way, and speakers might be tempted to fill in the gap (after all, language, like nature, abhors a vacuum). In fact, no descriptive grammar of English states that the adjacency between to and the base verb is obligatory.
Modern grammar textbooks such as Huddleston and Pullum’s A Student’s Introduction to English Grammar (2005) point out that “[p]hrases like to really succeed have been in use for hundreds of years”. They also claim that “in some cases placing the adjunct between to and the verb is stylistically preferable to other orderings” (see also this blog post).
Prescriptivism is fine as long as it is based on empirical evidence. By empirical evidence I mean generalizations over how native speakers speak. This is what contemporary grammar teaching is about. Prescriptivism is a problem if it is the work of a self-appointed language authority who deliberately ignores the assets of descriptivism.
Motion charts
Kudos to my colleague Martin Hilpert for popularizing motion charts in linguistics. You will find lots of examples and references in Martin’s dedicated page.
For more details regarding the code behind each motion chart, see this Google Developers page.
Making a motion chart is easy, but coercing the data frame into a format that the gvisMotionChart()
function recognizes is another story. As far as I am aware, there is no online tutorial for reshaping the data into the desired format (only demos with preformatted data sets).
Tools
Before you proceed, you should make sure that you have the following:
- a spreadsheet sofware (MS Excel or LibreOffice Calc),
- a text editor: e.g. Notepad++ for PC users and TextWrangler for Mac OS X users,
- R, of course.
In this demo, I am running Excel and TextWrangler on Mac OS Sierra (10.12.6).
Getting data from the corpus
the corpus
You need diachronic data. The Corpus of Historical American English is what we need. It is developed and maintained by Mark Davies and his team at corpus.byu.edu. The COHA consists of 400 million word tokens and 115,000 texts. The corpus is balanced by genre across twenty decades from the 1810s to the 2000s. It is perfect to see how American English has changed in the past two centuries.
If you have not done it yet, visit http://corpus.byu.edu/, register (it is free), and login. Then, go to http://corpus.byu.edu/coha/old and enter the corpus. This takes you to the query interface.1
the queries
You have to run two queries. One for split infinitives and another for unsplit infinitives. To make the search easier, we shall restrict the extraction to adverbs in -ly (e.g. boldly, really, absolutely, etc.). A split infinitive will be defined as to followed by any -ly adverb, followed by the base form of any verb. An unsplit infinitive will be defined as to followed by the base form of any verb, followed by any -ly adverb. Now, we need to translate these definitions into something that the query form recognizes.
Queries made via http://corpus.byu.edu/ follow a specific syntax. Each part of speech has a code. To retrieve all kinds of adverbs, you should enter [r*]
. To retrieve all adverbs that end in -ly, add *ly
as a prefix (*
stands for a wildcard, i.e. ‘one or more word characters’). That gives you: *ly.[r*]
. To retrieve the base form of any verb, you should enter: [v?i*]
. When you combine these codes, you obtain the following:
- syntax for split infinitives:
to *ly.[r*] [v?i*]
- syntax for unsplit infinitives:
to [v?i*] *ly.[r*]
Let us start with the split infinitive. The pattern to *ly.[r*] [v?i*]
should be entered in the “WORD(S)” search box (in the upper-right corner of the left frame). You should also click “CLICK TO SEE OPTIONS” at the bottom left of the page and set “FREQ” to 1000 instead of 100. This allows you to get a larger number of hits. Leave the other options unchanged.
After a few seconds, the results are displayed to the right.
Click anywhere in the right frame and press CONTROL + A
(or CMD + A
if you are on a Mac). Paste the selection into a spreasheet (CONTROL + V
or CMD + V
).
the clean-up
As you can see, the ouput of cut and paste is messy, and there is some manual clean-up to do. Note that the output depends on what browser you use.
In Excel, delete unwanted rows and columns (don’t forget to delete the row total at the bottom of the table) and shift the column header to the right so that each decade is on top of its own column. Replace each empty cell with 0
. Assign the name WORD
to the column that contains the matches. In this column, we only want the adverb, so we have to delete TO
and the verb. This is can be done easily in a text editor that implements regular expressions.
Copy and paste the whole table into your text editor. Activate the find-and-replace function by entering CONTROL/CMD + F
and make sure the grep
option is active. To remove TO
and the verb, replace TO (\w+LY) \w+
with \1
. When you deal with the unsplit infinitive, it is TO \w+ (\w+LY)
that you will have to replace with \1
. To remove all remaining spaces and trailing spaces, replace |^\s
with an empty character, i.e. nothing (note that there is a space before |
in |^\s
).
Once you are happy with the clean-up, save the text file using an obvious filename, e.g. split_inf.txt
. Repeat the above steps for the unsplit infinitive. Once you are done, you should have two distinct text files: split_inf.txt
and unsplit_inf.txt
.
Reshaping the tabulated data with R
There are two remaining issues:
-
- your data consists of two data frames instead of one;
-
- your two data frames do not have the format that the
googleVis
package requires.
- your two data frames do not have the format that the
In other words, you must go from two data frames in which each decade is a variable to a single data frame where decades are factors of a single variable. Let us see how we can obtain the desired data format in a few lines of code. Two R packages come to the rescue: reshape
and plyr
.
Install the reshape
package.
install.packages("reshape")
Load the package and the data frame.
# load reshape
library(reshape)
# load the split-infinitive data frame
split <- read.delim("split_inf.txt", header=TRUE, check.names=FALSE)
# inspect
str(split)
## 'data.frame': 1000 obs. of 21 variables:
## $ WORD: Factor w/ 202 levels "ABRUPTLY","ABSOLUTELY",..: 67 125 125 67 125 125 125 139 67 5 ...
## $ 1810: int 0 0 0 1 0 0 0 0 0 0 ...
## $ 1820: int 0 0 0 0 0 0 0 0 0 0 ...
## $ 1830: int 0 0 0 0 0 0 0 0 0 0 ...
## $ 1840: int 1 0 0 0 0 0 0 0 0 0 ...
## $ 1850: int 1 0 0 0 0 0 0 0 1 0 ...
## $ 1860: int 3 0 1 1 0 0 0 1 0 0 ...
## $ 1870: int 2 0 1 1 0 0 0 1 2 0 ...
## $ 1880: int 4 0 0 4 2 0 0 1 4 0 ...
## $ 1890: int 4 1 4 3 0 0 0 0 1 0 ...
## $ 1900: int 2 1 2 2 9 2 2 2 2 1 ...
## $ 1910: int 1 1 5 2 1 0 1 0 1 0 ...
## $ 1920: int 1 1 4 0 0 0 0 0 0 0 ...
## $ 1930: int 1 0 3 0 0 1 0 0 1 0 ...
## $ 1940: int 1 1 4 0 0 0 0 0 0 0 ...
## $ 1950: int 0 3 1 0 1 2 1 1 0 0 ...
## $ 1960: int 3 5 3 1 2 2 2 0 0 0 ...
## $ 1970: int 0 4 1 2 0 1 1 4 0 1 ...
## $ 1980: int 5 4 1 2 2 2 1 2 0 0 ...
## $ 1990: int 16 3 8 3 2 6 7 5 2 7 ...
## $ 2000: int 7 18 4 11 3 5 6 4 2 7 ...
With reshape
, we “melt” the data so that each row is a unique word-decade-frequency combination.
# melt
split.melt <- melt(split, id="WORD")
# inspect
str(split.melt)
## 'data.frame': 20000 obs. of 3 variables:
## $ WORD : Factor w/ 202 levels "ABRUPTLY","ABSOLUTELY",..: 67 125 125 67 125 125 125 139 67 5 ...
## $ variable: Factor w/ 20 levels "1810","1820",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ value : int 0 0 0 1 0 0 0 0 0 0 ...
Let us make the names of the second and third columns more explicit.
# change variable name
colnames(split.melt)[2] <- "DECADE"
# change variable name
colnames(split.melt)[3] <- "SPLIT_INF"
# inspect
head(split.melt, 10)
## WORD DECADE SPLIT_INF
## 1 FULLY 1810 0
## 2 REALLY 1810 0
## 3 REALLY 1810 0
## 4 FULLY 1810 1
## 5 REALLY 1810 0
## 6 REALLY 1810 0
## 7 REALLY 1810 0
## 8 SERIOUSLY 1810 0
## 9 FULLY 1810 0
## 10 ACTUALLY 1810 0
Now, repeat with unsplit_inf.txt
.
# load the unsplit-infinitive data frame
unsplit <- read.delim("unsplit_inf.txt", header=TRUE, check.names=FALSE)
# inspect
str(unsplit)
## 'data.frame': 1000 obs. of 21 variables:
## $ WORD: Factor w/ 380 levels "ABSOLUTELY","ABUNDANTLY",..: 230 104 243 136 279 207 1 97 377 105 ...
## $ 1810: int 0 6 5 2 1 0 2 0 1 3 ...
## $ 1820: int 15 18 11 8 9 12 3 21 15 12 ...
## $ 1830: int 21 32 20 26 2 5 11 20 17 27 ...
## $ 1840: int 34 41 33 20 14 16 11 21 30 20 ...
## $ 1850: int 50 35 29 17 14 12 5 29 30 22 ...
## $ 1860: int 40 53 38 11 3 13 6 31 24 21 ...
## $ 1870: int 40 42 48 20 15 14 22 22 23 19 ...
## $ 1880: int 48 42 32 32 17 28 19 22 20 23 ...
## $ 1890: int 46 43 49 25 20 22 26 16 26 17 ...
## $ 1900: int 45 33 35 15 35 17 25 19 19 12 ...
## $ 1910: int 48 31 34 18 24 24 35 19 21 8 ...
## $ 1920: int 56 44 28 18 30 36 21 10 13 18 ...
## $ 1930: int 35 27 24 13 19 21 27 11 17 14 ...
## $ 1940: int 38 27 11 10 21 25 11 2 10 14 ...
## $ 1950: int 47 13 26 12 14 18 19 12 9 12 ...
## $ 1960: int 39 14 18 24 20 19 20 8 6 10 ...
## $ 1970: int 45 9 26 20 20 13 12 8 5 8 ...
## $ 1980: int 44 11 20 14 10 11 20 9 3 8 ...
## $ 1990: int 18 12 19 22 23 13 13 6 3 15 ...
## $ 2000: int 31 9 24 31 31 5 14 8 2 10 ...
# melt
unsplit.melt <- melt(unsplit, id="WORD")
# change variable name
colnames(unsplit.melt)[2] <- "DECADE"
# change variable name
colnames(unsplit.melt)[3] <- "UNSPLIT_INF"
# inspect
head(unsplit.melt, 10)
## WORD DECADE UNSPLIT_INF
## 1 ONLY 1810 0
## 2 ENTIRELY 1810 6
## 3 PERFECTLY 1810 5
## 4 FULLY 1810 2
## 5 REALLY 1810 1
## 6 MERELY 1810 0
## 7 ABSOLUTELY 1810 2
## 8 EASILY 1810 0
## 9 WHOLLY 1810 1
## 10 EQUALLY 1810 3
Merge the two data frames (split.melt
and unsplit.melt
) into a unique data frame (df
).
# merge
df <- merge(split.melt, unsplit.melt, by=c("DECADE","WORD"))
# set DECADE to numeric
df$DECADE <- as.numeric(as.character(df$DECADE))
You are almost there! Summarize the merged data frame, this time using plyr
.
install.packages("plyr")
# load plyr
library(plyr)
# summarize
df <- ddply(df, c("WORD","DECADE"), summarize, SPLIT_INF=sum(SPLIT_INF), UNSPLIT_INF=sum(UNSPLIT_INF))
# inspect
head(df)
## WORD DECADE SPLIT_INF UNSPLIT_INF
## 1 ABSOLUTELY 1810 0 2
## 2 ABSOLUTELY 1820 0 3
## 3 ABSOLUTELY 1830 0 13
## 4 ABSOLUTELY 1840 0 11
## 5 ABSOLUTELY 1850 0 5
## 6 ABSOLUTELY 1860 0 6
# add a total column for combined frequencies
df$TOTAL_FREQ <- df$SPLIT_INF + df$UNSPLIT_INF
# inspect
head(df, 10)
## WORD DECADE SPLIT_INF UNSPLIT_INF TOTAL_FREQ
## 1 ABSOLUTELY 1810 0 2 2
## 2 ABSOLUTELY 1820 0 3 3
## 3 ABSOLUTELY 1830 0 13 13
## 4 ABSOLUTELY 1840 0 11 11
## 5 ABSOLUTELY 1850 0 5 5
## 6 ABSOLUTELY 1860 0 6 6
## 7 ABSOLUTELY 1870 0 22 22
## 8 ABSOLUTELY 1880 3 20 23
## 9 ABSOLUTELY 1890 3 26 29
## 10 ABSOLUTELY 1900 0 26 26
That’s it.
Plotting the results with googleVis
Thanks to the googleVis
package for R, plotting requires only two lines of code (ok, four if you count the lines used to download and load the package).
install.packages("googleVis")
library(googleVis)
M1 <- gvisMotionChart(df, idvar="WORD", timevar="DECADE")
plot(M1)
The gvisMotionChart()
function outputs code that you can copy and paste into an html page. There is a downside, though. The script relies on JavaScript and is rendered within the browser using Flash. Due to security settings, the motion chart might not display correctly on all browsers.
Interpreting the motion chart
Each bubble stands for an adverb. The size of the bubble depends on the adverb’s combined frequency in both split and unsplit infinitive constructions. The position of the adverb indicates how frequently it occurs in the split (x axis) or unsplit (y axis) infinitive. The closer an adverb gets to the diagonal from the lower-left corner to the upper-right corner of the plot, the more compatible it is with both constructions. The further right an adverb goes, the stronger its preference for the split construction. The further up an adverb goes, the stronger its preference for the unsplit construction.
Before you click on play, you may want to adjust playback speed (it’s the button right next to the play button). You may also want to change the display from raw frequencies (Lin
) to log-transformed values (Log
): this has the effect of spreading the data points and making tendencies easier to spot.
Unsurprisingly, the unsplit infinitive is far more frequent than its split counterpart. Nevertheless, a handful of adverbs (such as “really”, “fully”, “only”, “carefully”) make occasional inroads into split constructions (e.g. 1860s-1890s). The years around 1900 are the most conservative. The situation changes slightly after World War II. Disappointingly, the airing of Star Trek does not seem to have any visible impact around 1966. “Really” and “fully” stand out as the boldest adverbs: they lead the trend from the 1980s onwards. “Boldly”, on the other hand, does not bulge.
The toy dataset that I used has limitations (small size, only one adverb type, etc.), and the corpus is certainly biased with respect to genre. Therefore, we should be wary of making final conclusions based on this motion chart alone. Having said that, motion charts are great as a first approach.
Citer ce billet
Guillaume Desagulier (2017, 17 novembre). The split infinitive: the final frontier. Around the word. Consulté le 29 mars 2024, à l’adresse https://doi.org/10.58079/n4uc
- This is the older interface of the corpus. Somehow, I prefer it to the newer version. [↩]