使用字符串连接列表的每个元素

时间:2017-11-29 02:06:16

标签: r

定义了一堆字符对象。然后使用ls在列表中描述它们。我想用一个单独的字符串连接每个这些对象。

String = "stringToCombine"
Folder1 = "NameOne"
Folder2 = "NameTwo"
Folder3 = "NameThree"

ls(pattern="Folder")
[1] "Folder1" "Folder2" "Folder3"

Folder1
[1] "NameOne"

我能够使用assign将字符串与对象名称连接,而不是值。我认为get可能是这样做的方法,但我不确定如何应用它。

for (i in ls(pattern="Folder")) {
    assign(i, paste(String, i, sep="/"))
    }

期望的输出:

Folder1
[1] "stringToCombine/NameOne"

使用上述代码的实际输出:

Folder1
[1] "StringToCombine/Folder1"

我怀疑这是一个简单的解决办法,但我会感激任何帮助。

2 个答案:

答案 0 :(得分:3)

我建议将这些存储在这样的命名向量中:

 myFolders <- sapply(mget(ls(pattern="Folder")),
                     function(x) paste(String, x, sep="/"))

返回

myFolders
                    Folder1                     Folder2                     Folder3 
  "stringToCombine/NameOne"   "stringToCombine/NameTwo" "stringToCombine/NameThree"

使用命名向量,您可以按名称引用每个元素:

myFolders["Folder1"]
                  Folder1 
"stringToCombine/NameOne"

以及它在向量中的位置:myFolders[1]。然后,您还可以循环浏览向量,以使用for循环或lapply / sapply来访问文件。

由于paste将直接接受列表作为参数,您可以使这更短(并且更有效)来生成这样的未命名向量:

paste(String, mget(ls(pattern="Folder")), sep="/")
[1] "stringToCombine/NameOne"   "stringToCombine/NameTwo"   "stringToCombine/NameThree"

要在此构造中应用名称,请将其包装在setNames

setNames(paste(String, mget(ls(pattern="Folder")), sep="/"), ls(pattern="Folder"))

第二种方法是使用file.path函数,该函数旨在提供特定于操作系统的法律路径:

setNames(file.path(String, mget(ls(pattern="Folder")), sep="/"), ls(pattern="Folder"))
                  Folder1                      Folder2                      Folder3 
"stringToCombine/NameOne/"   "stringToCombine/NameTwo/" "stringToCombine/NameThree/"

答案 1 :(得分:2)

您只需添加get

即可
for (i in ls(pattern="Folder")) {
    assign(i, paste(String, get(i), sep="/"))
}
Folder1
[1] "stringToCombine/NameOne"