2017-07-21 37 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 
... 

你也可以用tidyeval做到這一點,在rlangdplyr

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)'。儘管你和'subset'都返回一個DF,而OP似乎希望'drop = TRUE' /來獲得列本身。另外,我想'dplyr :: select(iris,Sepal.Length)'已經做了你的樂趣呢? – Frank

相關問題