質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

960閲覧

【R】switch文における文字列の扱い

velonica74

総合スコア11

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/12/22 06:33

R言語において、動的な文字列を作成し、switchによる条件分岐処理を行いたいと考えています。
以下のように実装したのですが、

R

1 for (model in models) { 2 foo <- paste0(c("LSQI", "LSQU", "LS", "ME"), r-1) 3 bar <- switch(names(analysResults[model]), 4 foo[1] = "QI", 5 foo[2] = "QU", 6 foo[3] = "QS", 7 foo[4] = "MH" 8 ) 9 }
エラー: 予想外の '=' です in: " bar <- switch(names(analysResults[model]), foo[1] =" > foo[2] = "QU", エラー: 予想外の ',' です in " foo[2] = "QU"," > foo[3] = "QS", エラー: 予想外の ',' です in " foo[3] = "QS"," > foo[4] = "MH" > ) エラー: 予想外の ')' です in " )" > } エラー: 予想外の '}' です in "}"

上記のエラーが発生します。foo[i]が任意の文字列だと問題なく動作するようで、配列を参照する形だとうまくいかないようです。(switchのドキュメントもこの辺りの記載はありませんでした)

冗長な書き方は避けたいのですが、何か解決策があればお教えいただけると幸いです。
何卒よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

インデックスを使う方法はどうでしょうか。

r

1r <- 0 2models <- c("LS-1", "ME-1", "LSQI-1", "LSQU-1", "X-1") 3for (model in models) { 4 foo <- paste0(c("LSQI", "LSQU", "LS", "ME", NA), r-1) 5 bar <- which(foo %in% model) 6 bar <- if (length(bar) > 0) switch(bar, "QI", "QU", "QS", "MH") else NA 7 print(bar) 8} 9 10# 11[1] "QS" 12[1] "MH" 13[1] "QI" 14[1] "QU" 15[1] NA

投稿2021/12/22 15:38

melian

総合スコア19865

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

names(analysResults[model]の値に応じて特定の値を得たい。ただしnames(...)の返す値はアルファベット数文字+何か数字という形式で、返すべき値はアルファベット部分に対応しているということでしょうか。

私ならnames(...)の返り値のアルファベット部分を取り出して表引きで処理しますかね。
ちゃんとチェックしてませんが、こんな感じで。

foo <- read.table(text=" LSQI QI LSQU QU LS QS ME MH", stringsAsFactors=F) for (model in models) { bar0 <- gsub("\d+", "", names(analysResults[model])) bar <- foo[foo[1]==bar0, 2] }

投稿2021/12/22 12:38

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

velonica74

2021/12/23 08:54

まさしく仰る状況でした。ご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問