2017-07-21 9 views
0

関数に与えられた列を引数として返す関数を作成する必要があります。例えば列を返す関数の作成

fun = function (parameter) { 
result = get(paste0("dataframe","parameter")) 
return(result) } 

ので、私はfun (columnnamethatexists)を使用する場合、それは現在dataframe$columnnamethatexists

を返すだろうと、何それがないと、リターンデータフレーム$パラメータは関係なく、私が入力として置くものを、存在しませんです。

申し訳ありませんが、私はそれを見つけることができませんでした。

ありがとうございます!

+4

ますこれには関数を使用しません:dataframe [、 "parameter"]はあなたが望むものを返します – AidanGawronski

答えて

0
dataframe <- data.frame(a = 1:10, b = LETTERS[1:10]) 

fun <- function(val) { 
    dataframe[, val] 
} 

fun("a") 
# [1] 1 2 3 4 5 6 7 8 9 10 
fun("b") 
# [1] A B C D E F G H I J 
# Levels: A B C D E F G H I J 
0

私はdfもあなたの関数の引数であるべきだと思います。このソリューションは、常にdata.frameの形式で列を返します。

だから:

fun <- function(df, col){ 
    df[col] 
} 
fun(iris, "Sepal.Length") 
    Sepal.Length 
1   5.1 
2   4.9 
3   4.7 
4   4.6 
5   5.0 
6   5.4 
7   4.6 
8   5.0 
... 

またrlangにとdplyrで、tidyevalでそれを行うことができます。

library(rlang) 
library(dplyr) 

fun <- function(df, col){ 
    col <- enquo(col) 
    df %>% select(!!col) 
} 

fun(iris, Sepal.Length) 

ベスト、

コリン・

+0

あなたのNSE/quosuryのものは、基底Rに既に存在します: 'subset(iris、select = Sepal.Length)'。あなたと 'サブセット 'の両方がDFを返しますが、OPは' drop = TRUE' /がカラム自体を取得するように思えます。また、 'dplyr :: select(iris、Sepal.Length)'は、あなたの楽しみが何をしているのかと思いますか? – Frank

関連する問題