簡體   English   中英

無法將列名傳遞給 r 中的 function

[英]Cannot pass column names to function in r

我嘗試創建一個 function 來生成虛擬變量,但是我發現在創建跟蹤 function 時無法識別列名。

這是我的代碼:

library(tidyverse)
library(tidyr)
library(gridExtra)

## set the file path
file = "https://raw.githubusercontent.com/Carloszone/Kaggle-Cases/main/01-Titanic/train.csv"


## load data and name it "dat_train"
dat_train = read.csv(file)

## transform columns' data types
dat_train <- dat_train %>% transform(PassengerId = as.character(PassengerId),
                                     Survived = as.factor(Survived),
                                     Pclass = as.factor(Pclass),
                                     Sex = as.factor(Sex),
                                     SibSp = as.factor(SibSp),
                                     Parch = as.factor(Parch),
                                     Ticket = as.character(Ticket),
                                     Cabin = as.character(Cabin),
                                     Embarked = as.factor(Embarked)
)

## create functions
x <- function(data, name){
  dummy <- model.matrix(~name, data)[,-1] %>% head()
  return(dummy)
}

y <- function(data){
  dummy <- model.matrix(~Pclass, data)[,-1] %>% head()
  return(dummy)
}

## test functions
x(dat_train, "Pclass")

y(dat_train)

起初,我創建了 function "x",但我發現它不起作用:

 Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
  contrasts can be applied only to factors with 2 or more levels 

因此,我創建了 function "y",它運行良好。

  Pclass2 Pclass3
1       0       1
2       0       0
3       0       1
4       0       0
5       0       1
6       0       1

所以,我認為問題是列名無法傳遞給 function。 但我不知道如何處理這個問題。

您可以使用例如as.formula使您的 function 工作:

## create functions
x <- function(data, name){
  fmla <- as.formula(paste("~", name))
  dummy <- model.matrix(fmla, data)[,-1] %>% head()
  return(dummy)
}

## test functions
x(dat_train, "Pclass")
#>   Pclass2 Pclass3
#> 1       0       1
#> 2       0       0
#> 3       0       1
#> 4       0       0
#> 5       0       1
#> 6       0       1

代表 package (v0.3.0) 於 2021 年 1 月 2 日創建

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM