[解決済み] R の rgl パッケージの play3d() と movie3d() に f を入力する。
2022-02-19 07:20:10
質問
rglパッケージのplay3dとmovie3dが期待する入力fがよくわからないのですが。
library(rgl)
nobs<-10
x<-runif(nobs)
y<-runif(nobs)
z<-runif(nobs)
n<-rep(1:nobs)
df<-as.data.frame(cbind(x,y,z,n))
listofobs<-split(df,n)
plot3d(df[,1],df[,2],df[,3], type = "n", radius = .2 )
myplotfunction<-function(x) {
rgl.spheres(x=x$x,y=x$y,z=x$z, type="s", r=0.025)
}
以下の2行を実行すると、アニメーションは再生されますが、play3d()とmovie3d()の2行とも、以下のようなエラーが表示されるようになります。
play3d(f=lapply(listofobs,myplotfunction), fps=1 )
movie3d(f=lapply(listofobs,myplotfunction), fps=1 , duration=20)
私は誰かが私のコードを修正し、play3dとmovie3dへのf入力を理解するのを助けてくれることを期待しています。
質問1 : なぜ、上記のplay3dの行は、アニメーションが正しく表示されるほど正しいのでしょうか?
質問2 : なぜ上記のplay3dの行はエラーが発生するほど不正確なのでしょうか?
質問3 : movie3dのラインがビデオ出力されないのは、何が問題なのでしょうか?
解決方法を教えてください。
ドキュメントにあるように
f
は "par3d"に渡される可能性のあるリストを返す関数です。あなたの使い方が渡すのはリストではありません。
質問にお答えします。
-
Rが評価するのは
lapply
の呼び出しがあり、それがアニメーションを行い、その後play3d
を見ると、関数ではないので死んでしまいます。 -
f
は、ヘルプページで説明されているように、関数である必要があります。 -
を見ると死んでしまいます。
f
なぜなら、これは関数ではないからです。
これなら思い通りになりそうですね。
library(rgl)
nobs<-10
x<-runif(nobs)
y<-runif(nobs)
z<-runif(nobs)
df<-data.frame(x,y,z)
plot3d(df, type = "n" )
id <- NA
myplotfunction<-function(time) {
index <- round(time)
# For a 3x faster display, use index <- round(3*time)
# To cycle through the points several times, use
# index <- round(3*time) %% nobs + 1
if (!is.na(id))
pop3d(id = id) # Delete previous item
id <<- spheres3d(df[index,], r=0.025)
list()
}
play3d(myplotfunction, startTime = 1, duration = nobs - 1)
movie3d(myplotfunction, startTime = 1, duration = nobs - 1, fps = 1)
この場合、GIFは
file.path(tempdir(), "movie.gif")
.
その他、注意事項があります。
-
を呼び出さないでください。
rgl.spheres
. 後で大変な思いをすることになります。 使うspheres3d
または 決して を呼び出すことができます。*3d
関数をアップグレードすることはありません。rgl
: を使って過去に生きているんですね。rgl.*
関数を使用します。 は、その*3d
関数とrgl.*
関数はうまく連携してくれません。 -
を使用してデータフレームを構築します。
data.frame()
関数に変換しないでください。 は行列です。 - データフレームからポイントを抽出するために、そのような複雑な操作は必要ない。
-
ほとんどのrgl関数は、データフレームに
x
,y
およびz
カラムを使用します。 -
に気づくかもしれません。
plot3d
球体は点よりも大きいので、球体を収容するために調整されます。 そのためxlim
,ylim
とzlim
を使えば、元のフレームを少し大きく設定することができます。
関連
-
[解決済み] Unityのアニメーションがプレビューでは再生されるが、ゲームをプレイすると再生されない。
-
[解決済み] R の rgl パッケージの play3d() と movie3d() に f を入力する。
-
[解決済み] Unityでアニメーターを使用してアニメーションを再生する方法について教えてください。
-
[解決済み] (Godot Engine) AnimationPlayerのキー値を現在の値に設定する。
-
[解決済み] アニメーション CSS3: 表示 + 不透明度
-
[解決済み] jpg画像はアニメーションに対応できますか?
-
[解決済み] 1つの要素に複数のCSS遷移を持たせるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Unityのアニメーションがプレビューでは再生されるが、ゲームをプレイすると再生されない。
-
[解決済み] R の rgl パッケージの play3d() と movie3d() に f を入力する。
-
[解決済み] Unityでアニメーターを使用してアニメーションを再生する方法について教えてください。
-
[解決済み] (Godot Engine) AnimationPlayerのキー値を現在の値に設定する。
-
[解決済み] アニメーション CSS3: 表示 + 不透明度
-
[解決済み] jpg画像はアニメーションに対応できますか?
-
[解決済み] 1つの要素に複数のCSS遷移を持たせるには?