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

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

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

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

Q&A

解決済

1回答

550閲覧

変数がファイルとして認識されている?

takebamboo

総合スコア1

R

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

0グッド

0クリップ

投稿2022/12/08 06:11

前提

Rで複数のデータフレームに列を追加しようとしています。
複数のデータフレーム名が入っているsheet.namesとforを使ってそれぞれのデータフレームに列を追加しようとした時に以下のエラーメッセージが発生しました。
変数がファイルとして認識されている?ようなのですがよくわかりません。

実現したいこと

  • [1] sheet.namesに入っている名前のデータフレームに列を追加したいです。
  • [2]列を追加したデータフレームを元のデータフレームに上書きしたいです。

発生している問題・エラーメッセージ

警告:ファイル 'data1' を開くことができません: No such file or directory file(filename, "r") でエラー: コネクションを開くことができません

該当のソースコード

r

1for(i in 1:10){ 2 eval(parse(text = sheet.names[i])) <- eval(parse(text = sheet.names[i])) %>% 3 mutate(total = apply(eval(parse(text = sheet.names[i]))[,3:8], 1, sum)) 4}

試したこと

下記のコード部分の変数iに数字を手動で入れて動作することは確認しました。
上書きのためeval(parse(text = sheet.names[i])) <- を追記したところ上記のエラーメッセージが出ました。

r

1eval(parse(text = sheet.names[i])) %>% 2 mutate(total = apply(eval(parse(text = sheet.names[i]))[,3:8], 1, sum))

補足情報(FW/ツールのバージョンなど)

RStudio 2022.07.2+576 "Spotted Wakerobin" Release (e7373ef832b49b2a9b88162cfe7eac5f22c40b34, 2022-09-06) for macOS
Mozilla/5.0 (Macintosh; Intel Mac OS X 12_6_1) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.12.10 Chrome/69.0.3497.128 Safari/537.36

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

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

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

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

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

guest

回答1

0

ベストアンサー

私の知る限り eval(parse(text = xxx)))への代入はできません。
無難にassign(chr, value)を使われてはいかがでしょうか。

for(i in 1:10){ assign(sheet.names[i], eval(parse(text = sheet.names[i])) %>% mutate(total = apply(eval(parse(text = sheet.names[i]))[,3:8], 1, sum))) }

なおデータをリスト化してリストの各要素名をsheet.nameにするなどで、
eval(parse(text = xxx))を根本から排除するのがbetterだと思います。

投稿2022/12/08 06:45

cuttlefish44

総合スコア85

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

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

takebamboo

2022/12/08 07:59

ありがとうございます! 教えていただいたコードで無事実行できました。 assign関数は文字列を変数として認識してくれるのですね、勉強になりました。 リストを使った方法も練習してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問