【问题标题】:"subscript out of bounds" on character vector字符向量上的“下标越界”
【发布时间】:2013-08-27 09:16:27
【问题描述】:

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

nameAlpha_first <- sapply(strsplit(nameAlpha, "\\s+"), "[[", 1)

但我明白了

Error in FUN(X[[12L]], ...) : subscript out of bounds

可能是因为向量的几个元素是空的吗? 我该如何解决?

【问题讨论】:

    标签: r sapply strsplit


    【解决方案1】:

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

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

    你应该写

    sapply(strsplit(nameAlpha, "\\s+"), head, n=1)
    

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

    sapply(strsplit(nameAlpha, "\\s+"), tail, n=1)
    

    这将为您提供姓氏向量。

    【讨论】:

    • 太棒了!你可以解释吗?问题是缺失值吗?
    • 是的,问题在于缺失值。因为它没有元素 1。:) 原则上我会预处理您的字符向量并确保将“”、“”设置为 NA。
    • 我应该继续解析第二个名字吗? sapply(strsplit(nameAlpha, "\\s+"), head, n=2) 无法正常工作...
    • 实际上输出是一个列表而不是一个向量。我不得不取消列出 nameAlpha_head &lt;- unlist(nameAlpha_head)[2*(1:length(nameAlpha))-1]nameAlpha_tail &lt;- unlist(nameAlpha_tail)[2*(1:length(nameAlpha))]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2023-03-21
    相关资源
    最近更新 更多