R函数,该函数获取一个数据帧和一列列表,然后为这些列中的每一列向原始数据帧添加二进制变量

R函数,该函数获取一个数据帧和一列列表,然后为这些列中的每一列向原始数据帧添加二进制变量,r,function,R,Function,此函数不起作用,但如果我尝试代码而不使其成为函数,它就起作用。我不明白为什么。 数据可在此处找到: df.data以下是函数的正确版本: df.data <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv") namearray <- as.character(levels(df.data$continent)) binarycoladd &

此函数不起作用,但如果我尝试代码而不使其成为函数,它就起作用。我不明白为什么。 数据可在此处找到:


df.data以下是函数的正确版本:

df.data <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv")

namearray <- as.character(levels(df.data$continent))

binarycoladd <- function(a1, a2) {
  for (cn in a2) {
    cname <- paste0("binary_", cn)
    a1[cname] <- (a1$continent == cn)
  }
  return(a1)
}

binarycoladd(df.data, namearray)

在生成这个函数binarycoladd之后,如果我在R中使用它作为binarycoladd(df.data,namearray),什么都不会发生。您正在调用函数
binarycoladd
?谢谢您的回答。你也能告诉我为什么我尝试做的不起作用吗?我是一个初学者,因此非常想知道。@chiragkadian主要原因是:您没有从函数返回数据帧。。。要保存函数调用的结果,调用应该是
。。。谢谢你,先生。你是冠军!
df.data <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv")

namearray <- as.character(levels(df.data$continent))

binarycoladd <- function(a1, a2) {
  for (cn in a2) {
    cname <- paste0("binary_", cn)
    a1[cname] <- (a1$continent == cn)
  }
  return(a1)
}

binarycoladd(df.data, namearray)
binarycols <- function(x) {
  xlev <- levels(x)
  M <- sapply(xlev, '==', x)
  colnames(M) <- paste0("binary_", xlev)
  return(M)
}

cbind(df.data, binarycols(df.data$continent))
df.data <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv")
summary(lm(lifeExp ~ continent + year, data=df.data))