1

私はImがかなり必死になっている次の状況があります。

paste("crossdata","$geno$'",1:4,"'$data",sep="")

次のような4つの文字列を生成します。

"crossdata$geno$'1'$data" "crossdata$geno$'2'$data" "crossdata$geno$'3'$data" "crossdata$geno$'4'$data"

これらの文字列の1つを評価して、これら4つの文字列の対応するdata.framesを取得し、cbindを使用してそれらを結合したいと思います。しかし、私がこのようなことをしているとき:

cbind(sapply(parse(text=paste("crossdata","$geno$'",i,"'$data",sep="")),eval))

それは機能しません。誰かが私を助けることができますか?ありがとう

4

2 に答える 2

1

parseとの組み合わせを使用するとeval、ニューヨーク市からボストンに行く方法を知っていると言っているようなものです。したがって、出発地からニューヨーク、ボストン、目的地に行くことで、すべての旅行計画を立てることができます。場合によってはこれは悪くないかもしれませんが、ロンドンからパリに旅行している場合は少し長い回り道です。

$最初に、とを使用してサブセット化リストの関係と違いを学習する必要があります[[?'[['ドキュメントを参照)$parseとを必要としないソリューションを見つけることができるはずだということを理解したらeval

あなたの問題は次のように単純かもしれません(あなたの例は再現可能ではないのでテストされていません):

do.call( cbind, lapply( 1:4, function(x) crossdata[['geno']][[x]][['data']] ) )

またはおそらく

do.call(cbind, lapply(as.character(1:4), function(x) crossdata$geno[[x]]$data ) )
于 2013-01-10T17:40:59.970 に答える
1
datlist <- list(adat=data.frame(u=1:5,v=6:10),bdat=data.frame(x=11:15,y=16:20))

extdat <- c("datlist$adat","datlist$bdat")

do.call('cbind',lapply(extdat,function(i) eval(parse(text=i))))

  u  v  x  y
1 1  6 11 16
2 2  7 12 17
3 3  8 13 18
4 4  9 14 19
5 5 10 15 20

もちろん、これはeval+を使用しparseます。これは通常、間違った方向に進んでいることを意味します。

于 2013-01-10T14:03:54.153 に答える