这应该很简单。我目前正在努力制作一份列表,我的建设效率略高。而不是写出来:
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")
答案 0 :(得分:0)
这是做类似事情的一般方法。这个解决方案可能比最佳解决方案更复杂,但它可以工作,并可以扩展到类似的问题。它基于eval
和parse
。 parse
将字符串转换为未评估的表达式,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,...
中输入所有格式或样式希望这可以帮助找到类似问题的人。