在列表中一次设置多个值r

时间:2017-08-24 14:58:38

标签: r list

这应该很简单。我目前正在努力制作一份列表,我的建设效率略高。而不是写出来:

list('1'= value1, '2' =value1, '3' = value1)

我如何压缩它才能简单地列出我想要等于value1的数字。例如'1:4' =value1'1,2,3,4' =value1

编辑:

因此,对于后台,我目前正在尝试使用xlsx包为excel文件创建自定义格式。

wb = createWorkbook()
sheet =createSheet(wb,sheetName =  "TestFormatting")

dfcurrency = DataFormat("[$$-409]#,##0_ ;[Red]-[$$-409]#,##0 ")
dfdate = DataFormat("m/d/yyyy")

currency = CellStyle(wb, dataFormat = dfcurrency)
date = CellStyle(wb, dataFormat = dfdate)

datastyle = setNames(as.list(c(currency,date)),rep(c(3,4),c(1)))

data = addDataFrame(table,sheet, colStyle = datastyle) 

由于akrun的帮助,我目前正在运行。这给出了错误:

Error in thisColStyle$ref : no field, method or inner class called 'ref'

以防它有用,这里是表的数据结构:

structure(list(workingdate = structure(c(1458518400, 1458604800, 
1458691200, 1458777600, 1458864000, 1459119600), class = c("POSIXct", 
"POSIXt"), tzone = ""), trader = structure(c(1L, 1L, 1L, 1L, 
1L, 1L), .Label = c("a", "b", "c", 
"d", "e"), class = "factor"), pnl.1d = c(3, 
-573.7978, -107.1941, 1128.3061, -0.709699999999998, 3.55990000000003
), rt.1d.Util = c(0, -3.82531866666667e-05, -7.14627333333333e-06, 
7.52204066666667e-05, -4.73133333333332e-08, 2.37326666666669e-07
)), .Names = c("workingdate", "trader", "pnl.1d", "rt.1d.Util"
), row.names = c(NA, 6L), class = "data.frame")  

2 个答案:

答案 0 :(得分:0)

这是做类似事情的一般方法。这个解决方案可能比最佳解决方案更复杂,但它可以工作,并可以扩展到类似的问题。它基于evalparseparse将字符串转换为未评估的表达式,eval对其进行评估。

因此,eval(parse(text="5+5"))将返回10.

如果我们可以创建字符串"list('1'=value1, '2'=value1, '3'=value1)",我们就可以使用eval(parse(text=将其转换为您想要的列表。

以下代码将创建上述字符串:

value1 <- 'asdf'
paste(
    'list(', paste(sapply(seq_len(4), 
                 function(n) { paste("'", n,"'", "=", "value1", sep="")}), 
          collapse = ","),
    ')')

所以,结合一切,打电话

  eval(parse(text=
    paste(
      'list(', paste(sapply(seq_len(4), 
                 function(n) { paste("'", n,"'", "=", "value1", sep="")}), 
          collapse = ","),
      ')')))

你得到了你想要的清单。

答案 1 :(得分:0)

感谢Julian的评论,我能够为此创建一个解决方案。我会接受朱利安的评论作为答案,但会以我自己的(不太通用的)解决方案为例。它基本上应用了他的解决方案,以便以尽管非常迂回的方式创造更多的可定制性:

#if no columns need a type of format enter 0

a =paste(sapply(list(c(

  #enter column numbers formatted as currency eg. 1:5, 8, 10 

  3

  )), 
      function(n) { paste("'", n,"'", "=", "currency", sep="")}))

b =paste(sapply(list(c(

  #columns formatted as date

  1

  )), 
      function(n) { paste("'", n,"'", "=", "date", sep="")}))

您可以使用此通用公式以这种方式继续使用任意数量的变量。然后,您可以将它们组合成一个可以解析的文本文件:

text = paste( 'list(',paste(c(a,b,c,d), collapse = ","),')')

datastyle = eval(parse(text = text))

您只需在a,b,c,d,...

中输入所有格式或样式

希望这可以帮助找到类似问题的人。