0

3 つのテキスト ファイルがあります。以下に示すようにいくつかの計算を行い、結果を書きたいと思います。すべてのテキスト ファイルには、X1 から X14 までの 14 列と 601 行が含まれます。このコードは基本的に、3 つのファイルすべてから (たとえば、ref ファイルの x1 とファイル sour1 の同じ列 x1 など) の間の相関を計算し、いくつかの計算を行ってから結果を返します。

ref= read.table("D:\\S_asc.txt", sep="",header=TRUE)
sour1 = read.table("D:\\sre.txt", sep="",header=TRUE) 
sour2= read.table("D:\\os_asc.txt", sep="",header=TRUE)
columns <- paste0("X", 1:13)
lapply(
    columns,
    function(column)
    {
        result1 <- cor(ref[[column]],sour2[[column]],use = "na.or.complete")
        # calculate using ref and sour1

        result2 <-  cor(ref[[column]],sour1[[column]],use = "na.or.complete")   
        # calculate using ref and sour2

    }
)

結果を書き込むときにエラーが発生します。

write.table(result1,file = "foo.text")
Error in is.data.frame(x) : object 'result1' not found

私のファイルのサンプル:

"0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14"
"2" 0.189444444142282 0.317999997238318 0.166363635072202 0.301255410351666 0.471986238597248       0.307140744955515 0.411269603728529 0.262293613227113 0.265422601640182 0.196970316722191      0.123789306669182 0.291404434246697 0.322141939017999 0.43499182336885 0.327559809775301
"3" 0.149411764616768 0.191176471464774 0.180181817100807 0.422626723831494 0.496283823857852 0.327019521055943 0.441349119295007 0.286810015617714 0.24089.

        dput( head( ref ) ) 
          structure(list(X0 = c(0.0493461075417879, 0.0505162129561387, 
       0.0490028816673631, 0.049519460579677, 0.0496427079798826, 0.0506145435593228
       ), X1 = c(0.0262911450465596, 0.0249440745179165, 0.0240951294080254, 
      0.0256401352066387, 0.0258794329817874, 0.0247771567181071), 
        X2 = c(0.0426611743228151, 0.0374958657769128, 0.0306825108745032, 
         0.0393093163299325, 0.0398889994476742, 0.0435458658141826
         ), X3 = c(0.0954854469641096, 0.0833464493313783, 0.0790441582634745, 
         0.0818814458477848, 0.0772971938289144, 0.0818534809699011
        ), X4 = c(0.0933782886825547, 0.0968294484334356, 0.0981543002252867, 
         0.0969233013221434, 0.0933197039086707, 0.0913029715102785
         ), X5 = c(0.218212200747129, 0.220014530510402, 0.21109789420558, 
         0.204679954607016, 0.210967709615173, 0.20799168387628), 
       X6 = c(0.285405481705908, 0.284798691283541, 0.280772749846878, 
         0.285532926668878, 0.293501364933202, 0.296710869439616), 
        X7 = c(0.226218243796976, 0.216760771202585, 0.205519652752883, 
        0.206054283066245, 0.211842009508557, 0.214360803181363), 
       X8 = c(0.146648210899044, 0.144789395382814, 0.142059144367336, 
        0.141852209487122, 0.140823495101071, 0.140405076285803), 
        X9 = c(0.115716572518044, 0.113825119638324, 0.111749156097298, 
        0.111175507359272, 0.11094649408726, 0.111155298251533), 
         X10 = c(0.0675501818197432, 0.0636083677843573, 0.0605178392071445, 
           0.0549028963149205, 0.0600036757169919, 0.0625667586974292
         ), X11 = c(0.069120070466305, 0.0662362222295113, 0.0710726619403152, 
         0.0653345812188053, 0.0612221754441228, 0.0584222641456072
            ), X12 = c(0.281314574594234, 0.279000957729072, 0.276184085574267, 
            0.274121716868717, 0.271324697416127, 0.270268668362535), 
              X13 = c(0.364434947521643, 0.369388875815867, 0.372250445014838, 
          0.372470394613093, 0.372814994985087, 0.369151832740263), 
                X14 = c(0.0124844383491671, 0.0125512696973245, 0.0125538467586845, 
                   0.012599469429366, 0.0125682867660489, 0.0126515616426303
                   )), .Names = c("X0", "X1", "X2", "X3", "X4", "X5", "X6", 
                     "X7", "X8", "X9", "X10", "X11", "X12", "X13", "X14"), row.names = c("2", 
                     "3", "4", "5", "6", "7"), class = "data.frame")
4

2 に答える 2

2

関数内で作成された変数がその関数の外のスコープ外にあるため、そのエラーが発生しています。つまり、次の関数が評価されるときに、その関数の外部で使用するためRのストア値がわからないためです。result1result2

function(column)
    {
        result1 <- cor(ref[[column]],sour2[[column]],use = "na.or.complete")
        # calculate using ref and sour1

        result2 <-  cor(ref[[column]],sour1[[column]],use = "na.or.complete")   
        # calculate using ref and sour2

    }

私が言ったことを実証するために、以下のコードを試してください

testFunc <- function() {
    a <- 0
}

testFunc()

print(a)

次のようなエラーが発生します。

Error in print(a) : object 'a' not found

したがって、 で提案されているように、呼び出しの結果をおよび に個別SimonO101に割り当てる必要があります。lapplysour1sour2

result1 <- lapply( columns , function(column) { cor(ref[[column]],sour2[[column]],use = "na.or.complete") } )

result2 <- lapply( columns , function( column ) { cor(ref[[column]],sour1[[column]],use = "na.or.complete") } )
于 2013-03-15T09:30:32.213 に答える
1

結果1をlapply.ieに割り当てる必要があります

result1 <- lapply( columns , function(column) { cor(ref[[column]],sour2[[column]],use = "na.or.complete") } )

結果 2 についても同じことを行います。

result2 <- lapply( columns , function( column ) { cor(ref[[column]],sour1[[column]],use = "na.or.complete") } )

結果を分離するには、コードを変更して結果を次のようにフォーマットしてみてください...

    columns <- paste0("X", 1:13)
result1 <- lapply( columns , function(column){ cor(ref[[column]],sour2[[column]],use = "na.or.complete") } )
result2 <- lapply( columns , function(column){ cor(ref[[column]],sour1[[column]],use = "na.or.complete") } )
names( result1 ) <- columns
names( result2 ) <- columns


write.table( result1 , file = "foo.txt" , row.names = "res1" )
write.table( result2 , file = "foo.txt" , row.names = "res2" , col.names = FALSE  , append = TRUE )
于 2013-03-15T08:59:24.810 に答える