問題タブ [sapply]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
5325 参照

r - 同じベクトルの隣接する要素を比較する (ループを回避する)

for loop次のベクトルで文字を比較するa を書くことができました。

test戻ります

関数Comp()を使用して、文字が次の文字と一致しているかどうかを確認できます

その結果;

これは機能していますが、数が多いと非常に遅くなります。そのため、私は試しましたsapply()

残念ながら動作しません... ( Error in i + 1 : non-numeric argument to binary operator) ベクター内の前の文字にアクセスして比較する方法がわかりません。また、length(data)-1最後の文字を「比較しない」ことも問題になる可能性があります。

助けてくれてありがとう!

乾杯ラッキー

0 投票する
7 に答える
163444 参照

r - 各列の既存のデータ型を観察して、データフレームの各列に関数を適用します

データを理解する一環として、大きなデータ フレームの各列の最小値/最大値を取得しようとしています。私の最初の試みは:

最初の数列は文字型であるため、すべてを文字ベクトルとして扱います。そのため、一部の数値列の最大値は として出てきます" -99.5"

次に、これを試しました:

しかし、 factor にとって意味のない maxについて文句を言います。(lapply同じです。)私を混乱させているのは、apply考えmaxが要因に対して完全に意味があることです。たとえば、列1に「ZEBRA」が返されました。

ところで、Using sapply on vector of POSIXct を調べたところ、答えの 1 つに「sapply を使用すると、オブジェクトが強制的に数値に変換されます...」とあります。これは私に起こっていることですか?もしそうなら、強制しない代替の適用機能はありますか? データ フレーム タイプの重要な機能の 1 つは、各列を異なるタイプにできることであるため、これは確かに一般的なニーズです。

0 投票する
2 に答える
739 参照

r - which.minがデータフレームのsapply内で正しく機能していませんか?

sapplyとwhich.minを使用して、条件を満たすデータフレーム内の最初の行を見つけようとしたときに見つかったこの奇妙な動作を誰かが説明できますか?

データフレームはtrAprです。これは、customer_id(増加)、次にトランザクションvisit_date(増加)でソートされます。customer_idごとに、trAprの最初のトランザクションの行インデックスを検索します。(customer_idごとに全体的に可変数のトランザクションがありますが、これは重要ではありません。)

コードに関するその他の注意事項:

  • all_tr_cidsソートされた一意のcustomer_idのリストですunique(trApr$customer_id):)
  • n:mは、デバッグ中にデータフレームの小さなスライスを取得するために使用した単なるインデックスです。しかし、私はdf全体にsapplyをしたい

問題のコードは次のとおりです。

sapplyによって返される中間の不規則なオブジェクトは以下のとおりです(intのリストの10個のリストです)。

which.minがそのような構造を処理できない場合は、1のリストを陽気に返すのではなく、実際に警告を発する必要があります。

0 投票する
1 に答える
443 参照

r - R での複数の最小コスト分析のための loop または sapply 関数

最小コスト分析のためにパッケージ gdistance を使用しています。アイデアは、定義されたコスト値を持つコスト グリッド (ラスター) を介して、宛先ポイントからソースへのパスを決定することです。これにより、パスはコストの高いピクセルを回避し、コスト値の低いピクセルを優先します。私のデータで機能するコードは次のとおりです。

これにより、コストグリッドをCostTrans構成し、Cherangfirstloc.utm[1,]Spatialpoints データフレーム (ソース) からの最初の場所/ポイントでありCherangfirstloc.utm[132,]、Spatialpoints データフレーム (宛先) からの最後の場所/ポイントです。出力は、両方の場所/ポイントを結ぶ線です。

ただし、複数の最小コスト パスを計算したいので、ソースはデータフレームのすべての行になり、宛先は変わりません。これは、次のソースがCherangfirstloc.utm[2,]、その後Cherangfirstloc.utm[3,]などになることを意味します。これは、for ループまたは関数で実行できると思いますsapply。残念ながら、私はこれを定式化する方法を知りません。

この反復プロセスを定式化する方法について何かヒントをいただけますか? この場で質問してもよろしいでしょうか。基本的に、データフレームを反復処理する方法を知りたいだけです。したがって、gdistance と最小コスト分析がどのように機能するかは重要ではありません。

サンプル データとして使用できるコードを次に示します。

残念ながら、反復できるように c1、c2、および c3 を Spatialpoints データフレームに含める方法がわかりませんでした。これがまだ役立つことを願っています。

そのあたりのヒントを教えていただければ幸いです。あなたの努力に感謝します!

0 投票する
1 に答える
435 参照

r - 関数は、指定された i で行ごとに適切に実行されますが、関数呼び出しでは機能しません

i=4 または i=10 を指定して、関数定義内のコードを 1 行ずつ実行すると、完全に機能しnew_list[[i]]、 の値が割り当てられますt(block)。しかし、私がするとき

エラーメッセージを返します

関数呼び出しで機能しない理由を知っている人はいますか? ありがとうございました!!

0 投票する
7 に答える
95333 参照

r - Rでリストからサブセット化する方法

私はかなり単純な仕事をしていますが、良い解決策が見つかりません。

リスト内の各コンポーネントのサブ要素 3、5、および 9 をmylistから抽出したいと思います。私は試してみsapply[mylist,"[[",y]ましたが、運が悪いです!、その他には vapply、lapply などがあります。

マウリシオ・オルティス

0 投票する
2 に答える
3081 参照

r - R:data.tableの列をループします

大きなdata.tableの列クラスを決定したいと思います。

動作しますが、明らかにローカルコピーがメモリに保存されます。

data.table "with = FALSE"は常にdata.tableになるため、ループは不可能のようです。

迅速で非常に汚い方法は次のとおりです。

これを行うための最も効率的で効率的な方法は何ですか?

0 投票する
4 に答える
418 参照

r - data.frame:行のグループに関数を適用して列を作成します

実験の複数の実行からの結果で構成されるデータフレームがあります。各実行はログとして機能し、独自の昇順カウンターがあります。以下のサンプルiterationのの個別の値ごとにの最大値を持つ別の列をデータフレームに追加したいと思います。experiment.num

この例では、追加の列は次のようになります(すべてのサブセットの最大値が同じであるためiteration)。

私が現在使用している素朴な解決策は次のとおりです。

また、元のフレームとマージできる別のフレームを作成するために使用sapply(unique(df$experiment.num), function(n) c(n,max(df$iteration[df$experiment.num==n])))しましたが、これらのアプローチはどちらも必要以上に複雑に見えます。

列が要因であるため、experiment.numすべての行に対してこの単純なサブセット化を繰り返し実行することを回避するために、それを利用できる可能性があると思います。

のサブセットの最大値の列を取得するためのより良い方法はありdata.frameますか?

0 投票する
1 に答える
230 参照

r - 複数のリストで機能する

私はそれほど多くの関数を使用しませんが、使用するときは、anon関数と何らかの形式のを使用する傾向がありapplyます。ただし、現在、リスト内のアイテムを処理する関数を作成しようとしています。

それぞれが多くのアイテムを持っている2つのリストがあります(アイテムによって私は例えばmylist1[1])。すべてのアイテムはデータフレームです。mylist1から最初のデータフレームを取得し、から最初のデータフレームを取得mylist2して、それらのデータフレームの列に対して一連の関数を実行したいと思います。次に、2番目mylist1のアイテムと2番目のアイテムを取りmylist2ます...

以下は私が書くことに慣れている種類のものですが、この場合、2つのリストでは明らかに機能しません。sapply主な問題を引き起こしていると思われる方法以外の方法を使用して、これにどのようにアプローチすべきかをすばやく理解する方法を誰かが手伝ってくれますか?

subset私はまた、人々はそのように機能するzよりも、それを行う方が良いと思うのだろうかと思いましたsplitか?

0 投票する
2 に答える
1495 参照

r - sapply を for ループに書き換える方法

sapplyの動作をfor ループに置き換えたい。(興味がある場合は、その理由についてさらに下を参照してください。)

これが私のコードのsapplyバージョンの簡略化です:

それは私に与えます:

(これは良いことですが、実際には n の値を行として、a、up、down、level を列として転置したいのですが、問題ありません。その方法は知っています。)

それを for ループにすると:

次に、次のような8つの警告メッセージが表示されます。

結果は大きく異なります。

何が起こっているのか、なんとなくわかります。私が知らないのは、私が望む結果を得るための魔法の呪文です! matrix()結果をorに初期化list()して、同じ出力で試してみました。

ASIDE : なぜ for ループを使いたいのですか? 実際には、sapply ループのパスごとに 2 つの計算を実行したいと考えています。つまり、8 回の呼び出しだけでslow_function16 行の結果が返されます。sapply が許可した場合、私のコードは次のようになります。

望ましい出力: (フォーマットがオフになっていて申し訳ありません。手動で作成する必要がありました)