2016-10-24 12 views
0

私は、セルの値を受け取り、そこからコメントを生成する関数を持っています。動的レポートの生成

私は効果的に適用する方法を学ぼうとしています。

I残念ながら、それが構築され

report <- iris 

build_comments <- function (report) { 

mydf <- report 
mycomment <- paste("Analysis Of", mydf[,5],"for flower", mydf[,5], "with  width", mydf[,2], "being the most impacted with ", 
      "Most of the items had length of", mydf[,1], 
sep = " ") 
    cat(mycomment) 
} 


apply(report[,c(2,3,10,11)],1,build_comments) 

行の各セル内に含まれる値に基づいて、行ごとに文を作る目的で、10行4列を含むデータフレームを渡しプレースホルダーに追加された列内のすべての項目に対するコメント1つ。誰もが間違いを見ることができます

私はまた、それがより簡単だと思う場合purrrアプローチをとるでしょう。

+4

「ペースト」はベクトル化されている。 'apply'ループの必要はありません。 'cat'は意図した使い方以外のもの、特に目に見えない' NULL'を返すので、関数の戻り値としてではなく、適切ではありません。 'sprintf'はこのユースケースの方が便利です。 – Roland

+0

ヘルプがさらに必要な場合は、最小限の再現可能な例を提示してください。 – Roland

+2

この例を試してみてください: 'mtcars $ comment < - with(mtcars、 貼り付ける("この車には、 "円筒があります"、円筒、 " "と "、ギア、ギア")) ' – zx8754

答えて

1

は、この例を試してみてください。

mtcars$comment <- 
    with(mtcars, 
     paste("This car has", cyl, "cylinders", 
      "and", gear, "gears.")) 

それともローランドはsprintf()を使用して、提案されたよう:

mtcars$comment <- 
    with(mtcars, 
     sprintf("This car has %i cylinders and %i gears.", 
       cyl, gear)) 

with()単にdata.frame内の式を評価し、繰り返しmtcars$を入力する必要がなくなります。

# without using "with()" 
mtcars$comment <- 
    sprintf("This car has %i cylinders and %i gears.", 
      mtcars$cyl, mtcars$gear) 
関連する問題