1

Rでフレーム構文を使用するのが本当に好きです。ただし、applyを使用してこれを実行しようとすると、入力がフレームではなくベクトルであるというエラーが発生します(これは正しいです)。mapplyに似た機能があり、フレーム構文を使い続けることができますか?

df = data.frame(x = 1:5, y = 1:5)

# This works, but is hard to read because you have to remember what's
# in column 1 
apply(df, 1, function(row) row[1])

# I'd rather do this, but it gives me an error
apply(df, 1, function(row) row$x)
4

1 に答える 1

2

Youcabはアトミックベクトルでは使用しませんが、読みやすく$するために使用したいと思います。ただし、subsetterを使用できます。[

ここに例があります。次回は再現可能な例を教えてください。Rの質問は、特にデータなしでは意味がありません。

set.seed(1234)
gidd <- data.frame(region=sample(letters[1:6],100,rep=T),
                   wbregion=sample(letters[1:6],100,rep=T),
                   foodshare=rnorm(100,0,1),
                   consincPPP05 = runif(100,0,5),
                   stringsAsFactors=F)

  apply(gidd, ## I am applying it in all the grid here!
          1, 
        function(row) {
        similarRows = gidd[gidd$wbregion == row['region'] &
                         gidd$consincPPP05 > .8 * as.numeric(row['consincPPP05']),
                       ]
    return(mean(similarRows$foodshare))
  })

applyを使用して、数値に変換する必要があることに注意してください。

クリーンな構文として、plyrまたはを使用することもできます。次に例を示します。data.table

  apply(df,1,function(row)row[1]*2)

と同等です

  ddply(df, 1, summarise, z = x*2)
于 2013-02-09T15:01:42.367 に答える