簡體   English   中英

在R函數中傳遞正確的參數

[英]Passing the right arguments in R function

嗨,我有一個數據框,看起來像:

> head(Panel)
   Region Year Population TotalFedTax  BusIncTax IndivIncTax TotalFedSpend
1 Alabama 2000    4452173 18869238000 1541602000 16856323000   37650535757
2 Alabama 2001    4467634 18181072000 1064539000 16779861000   38739545139
3 Alabama 2002    4480089 18650989000 1867639000 16357183000   42052557014
4 Alabama 2003    4503491 17907240000 1472356000 16152532000   45395531847
5 Alabama 2004    4530729 18489339000 1931414000 16205117000   48874307713
6 Alabama 2005    4569805 20398808000 2198098000 17806684000   52057416455

我想創建一個函數,該函數創建給定年份中從上面的面板靈活創建的變量的映射。 例如,2000年的“總支出/人口總數”地圖將為:

temp <- subset(Panel, Year == 2000)
x <- data.frame(temp$Region, temp$TotalFedSpend / temp$Population)
title <- "TotalFedSpend / Population in 2000"
names(x) = c('region','value')
x[,1] = tolower(x[,1])
states <- data.frame(state.center, state.abb)
states_map <- map_data("state")
df = merge(x, states_map, by = "region")
p1 <- ggplot(data = df, aes(x = long, y = lat, group = group))
p1 <- p1 + geom_polygon(aes(fill = cut_number(value, 8)))
p1 <- p1 + geom_path(colour = 'gray', linestyle = 2)
p1 <- p1 + scale_fill_brewer('',palette = 'PuRd')
p1 <- p1 + ggtitle(title)
p1 <- p1 + coord_map()
p1

這段代碼本身就可以正常工作,但是我無法創建一個靈活地創建系列的函數來執行此映射。 即我想創建一個也可以映射系列的函數,例如“ 2010年的BusIncTax + IndivIncTax”。 我不知道我應該傳遞什么樣的參數,以指定變量,以及如何在函數內部固定第二行(x <-data.frame ...)和第三行(title <-...)。

感謝您的幫助!

temp <- subset(Panel, Year == 2000)
x <- data.frame(temp$Region, temp$TotalFedSpend / temp$Population)


ff <- function(v1, v2, v3, op, data) {
  attach(data)
  tmp = paste(v2,op,v3)
  x = eval(parse(text=tmp))
  return(x)
}

print(ff(Region, TotalFedSpend, Population, "+", temp))
print(ff(Region, TotalFedSpend, Population, "/", temp))
temp <- subset(Panel, Year == 2000)
x <- data.frame(temp$Region, temp$TotalFedSpend / temp$Population)


ff <- function(v1, v2, v3, op, data) {
  attach(data)
  l = paste(v2,op,v3)
  #x = eval(parse(text=l))

  x <- data.frame(v1,eval(parse(text=l)))
  title <- "TotalFedSpend / Population in 2000"
  names(x) = c('region','value')
  x[,1] = tolower(x[,1])
  states <- data.frame(state.center, state.abb)
  states_map <- map_data("state")
  df = merge(x, states_map, by = "region")
  p1 <- ggplot(data = df, aes(x = long, y = lat, group = group))
  p1 <- p1 + geom_path(colour = 'gray', linestyle = 2)
  p1 <- p1 + scale_fill_brewer('',palette = 'PuRd')
  p1 <- p1 + ggtitle(title)
  p1 <- p1 + coord_map()
  p1
  return(p1)
  #return(x)
}

暫無
暫無

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

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