2017-11-29 13 views
2

複数の文字オブジェクトが定義されています。それらは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

あなただけの私はこのような名前のベクトルでこれらを保存することをお勧めしたいget

for (i in ls(pattern="Folder")) { 
    assign(i, paste(String, get(i), sep="/")) 
} 
Folder1 
[1] "stringToCombine/NameOne" 
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(file.path(String, mget(ls(pattern="Folder")), sep="/"), ls(pattern="Folder")) 
        Folder1      Folder2      Folder3 
"stringToCombine/NameOne/" "stringToCombine/NameTwo/" "stringToCombine/NameThree/" 

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

第二の代替は、オペレーティングシステム固有の法的な経路を提供することを意図しているfile.path関数を使用することです

関連する問題