【问题标题】:R - write function and allow user input to name data frame column within function [duplicate]R - 编写函数并允许用户输入在函数内命名数据框列[重复]
【发布时间】:2016-09-06 20:06:14
【问题描述】:

我写了以下函数:

create_dls <- function(injury_type, col1, col2){ 
    injuries_10 = subset(dl2010, dl2010$Location %in% injury_type)
    injuries_11 = subset(dl2011, dl2011$Location %in% injury_type)
    on2010 = c()
    on2011 = c()
    for (mlbid in starting_pitchers$shared_players.MLBID){
        if (mlbid %in% injuries_10$MLBID){
            on2010 = c(on2010, 1)}
        else {
            on2010 = c(on2010, 0)}
        if (mlbid %in% injuries_11$MLBID){
            on2011 = c(on2011, 1)}
        else {
            on2011 = c(on2011, 0)}}
   sp_predictor$col1 <<- on2010
   sp_predictor$col2 <<- on2011
}

当我运行如下代码时:

create_dls(shoulder_injuries, "2010_sDL", "2011_sDL")

我得到了输出:

> head(sp_predictor)
  starting_pitchers.shared_players.MLBID col1 col2
1                                 112020    0    0
2                                 115399    0    0
3                                 115817    0    0
4                                 117955    0    0
5                                 119154    0    0
6                                 123801    0    0

我想要做的是让 sp_predictor 的列名成为函数中的用户输入,而不是命名为 col1 和 col2。仅供参考,我尝试了以下方法,但没有成功。

function(injury_type, col1="Column 1 Name", col2="Column 2 Name")

x=toString(col1)
sp_predictor$x <<- on2010

x=get("col1")
sp_predictor$x <<- on2010

以上方法均无效。 (注意:这是我在 StackOverflow 上发布的第一个问题,如果我问错了这个问题,请告诉我!)

【问题讨论】:

    标签: r


    【解决方案1】:

    在分配给sp_predictor 时使用[[ 而不是$

    create_dls <- function(injury_type, col1, col2){ 
        injuries_10 = subset(dl2010, dl2010$Location %in% injury_type)
        injuries_11 = subset(dl2011, dl2011$Location %in% injury_type)
        on2010 = c()
        on2011 = c()
        for (mlbid in starting_pitchers$shared_players.MLBID){
            if (mlbid %in% injuries_10$MLBID){
                on2010 = c(on2010, 1)}
            else {
                on2010 = c(on2010, 0)}
            if (mlbid %in% injuries_11$MLBID){
                on2011 = c(on2011, 1)}
            else {
                on2011 = c(on2011, 0)}}
       sp_predictor[[col1]] <<- on2010
       sp_predictor[[col2]] <<- on2011
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 2022-12-06
      • 1970-01-01
      相关资源
      最近更新 更多