字符向量上的“下标超出范围”

Cpt*_*emo 2 r strsplit sapply

我有一个向量“nameAlpha”,例如c(“Mark Twain”,“Phil Hall”,“Michael P. O'Connor”,“”,...)。我想将每个名字传递给另一个向量“nameAlpha_first”。我运行这个

nameAlpha_first <- sapply(strsplit(nameAlpha, "\\s+"), "[[", 1)
Run Code Online (Sandbox Code Playgroud)

但我得到

Error in FUN(X[[12L]], ...) : subscript out of bounds
Run Code Online (Sandbox Code Playgroud)

难道是因为向量中很少有元素是空的吗?我该如何解决它?

Dr.*_*ike 5

假设我们定义并预处理一个字符向量:

nameAlpha<-c("Mark Twain", NA, "Phil Hall", 
             "Michael P. O'Connor", " ", "", NA, "John")
nameAlpha[which(nchar(nameAlpha)<2)]<-NA
Run Code Online (Sandbox Code Playgroud)

你应该写

sapply(strsplit(nameAlpha, "\\s+"), head, n=1)
Run Code Online (Sandbox Code Playgroud)

它会起作用的。如果你想要姓氏,你可以这样做

sapply(strsplit(nameAlpha, "\\s+"), tail, n=1)
Run Code Online (Sandbox Code Playgroud)

这将为您提供姓氏向量。