定义了一堆字符对象。然后使用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"
我怀疑这是一个简单的解决办法,但我会感激任何帮助。
答案 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"