2017-02-13 12 views
0

データフレームがdf、カラム数が20です。変数名を入力とするユーザー定義関数があります。私はデータフレームから特定の列を抽出し、それを返そうとしています。しかし、私は、次のコードを実行した後にエラーが表示されます。データのサブセットにアクセスできないR

p <- function(param){ 
    df <- read.csv("data.csv",header=TRUE,stringsAsFactors=FALSE) 
    var_name <- eval(substitute(param)) 
    print(df$var_name) 
} 

機能がNULLを返します。私は問題がdf$var_nameにあると思うが、私はそれを解決する方法を知らない。任意のポインタが役立つだろう。

+1

'$ 'ではなく' [[]] 'を使用して列名でサブセット化します。なぜ 'eval(subs ...())'が必要なのか?文字列として列名を渡していますか? –

答えて

0

試行print(var_name) データフレームにvar_name列がないと仮定します。おそらく存在しないでしょう。あなたの機能が正しいと仮定してください!

0

は、私は、その入力変数名であると私は は、データフレームから特定の列を抽出し、 それを返すようにしようとしています、ユーザー定義関数を持っています。

上記の文は意味をなさない。変数名は列名と同じではありません。

あなたが列abcでデータフレームdfを持っている場合はabcは(データフレームdf用)列の名前であるが、その後、dfは変数名です。だから、あなたの関数は変数名を入力しません。列名を入力します。

変数名paramを入力した場合は、構成eval(substitute(param))が意味を持ちます。この名前の価値をあなたに提供します(例:

a <- 5 
b <- "a" 
eval(substitute(b)) 

プリント5です。

paramは列名なので、構造体eval(substitute(param))は意味を持ちません。あなたは

df[[,param]] 

dfが行列ではなく、データフレームになる場合は、あなたの代わりにdf[,param]としてその列にアクセスする必要がある)として列にアクセスする必要があります。

+0

私はあなたの答えの冒頭であなたの批判の多くでは同意しません:用語、列名と変数名は私の分野(生物統計学)で交換可能に使用されることが多く、データセットdf変数と呼ばれることはありません。 – user20650

+0

さて、あなたはそれらを同じ意味で使うことができますが、コードは機能しません。 – user31264

関連する問題