2017-08-24 19 views
0

これは本当に簡単です。私は現在、私が少し効率的にビルドしているリストを作成しようとしています。代わりに書き出すするので:複数の値をリストにまとめて設定するr

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

私は、これは単に私がVALUE1に等しくなるようにしたい番号を一覧表示することができるように凝縮だろうか。例えば'1:4' =value1または'1,2,3,4' =value1

EDIT:

ので、背景のために、私は現在の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

私はxlsxを使用しています.. – alex1stef2

答えて

0

はここで同様のことを行うには非常に一般的な方法です。このソリューションは、最高のソリューションより複雑な可能性がありますが、機能し、同様の問題に拡張することができます。それはevalparseに基づいています。 parseは文字列を未評価の式に変換し、evalはそれを評価します。

私たちは、あなたが望むのリストにそれを回すためにeval(parse(text=を使用することができ、文字列"list('1'=value1, '2'=value1, '3'=value1)"を作成することができますので、もし、eval(parse(text="5+5"))は10

を返します。

次のコードは、上記の文字列を作成します。

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 = ","), 
     ')'))) 

を呼び出し、あなたが欲しいリストを取得します。

0

Julianのコメントのおかげで、私はこれに対する解決策を作り出すことができました。私は答えとしてジュリアンのコメントを受け入れますが、私自身の(あまり一般的ではない)解決策を例として挙げます。いえ非常に遠回しによりcustomisabilityを作成するようにそれは基本的に彼の解決策を適用します。

#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="")})) 

あなたが好きなように多くの変数のために、この一般式で、このやり方で続けることができます。

は、これが役立ちますうまくいけば...、あなたは、単に、B、Cにすべてのフォーマットやスタイルを入力し

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

datastyle = eval(parse(text = text)) 

、D:あなたは、その後に解析する準備ができて1つのテキストファイルにそれらを組み合わせることができます同じような問題を発見した人

関連する問題