2017-12-03 3 views
0

Ich habe versucht, 3D-Oberfläche mit äußeren Funktion zu bekommen. Und eine Funktion, die ich definiert habe, verweist Spalte in data.frame. Unten ist ein kurzer Code, der reproduzierbar ist.äußere Funktion Fehler mit Funktion einschließlich Daten-Frame-Referenzierung

test.txt ist

a b c 
    1 0 0 
    2 0 0 
    3 0 0 
    6 0 0 
    4 0 0 

und Code ist

test<- read.table(file="test.txt",header=TRUE) 

testf<-function(q,w){ 
test$b<-q 
test$c<-w 
sum(test$b)+sum(test$c) 
} 

x<-seq(1,10,by = 1) 
y<-seq(0,30,by = 1) 

z<-outer(x,y,testf) 

Ergebnis als Fehler dargestellt ist

Error in `$<-.data.frame`(`*tmp*`, "b", value = c(1, 2, 3, 4, 5, 6, 7, : 
replacement has 310 rows, data has 5 

5.stop(sprintf(ngettext(N, "replacement has %d row, data has %d", 
"replacement has %d rows, data has %d"), N, nrows), domain = NA) 

4.`$<-.data.frame`(`*tmp*`, "b", value = c(1, 2, 3, 4, 5, 6, 7, 
8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 
8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 
8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, ... 

3.`$<-`(`*tmp*`, "b", value = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ... 

2. FUN(X, Y, ...) 

1. outer(x, y, testf) 

Funktion selbst kein Problem, da testf (1,1) Werke scheint

> testf(1,1) 
[1] 10 

wir beraten Sie gerne!

+0

die data.frame 'zu erzeugen test' Sie hat '5' Reihen definiert, aber Sie wollen ersetzen Sie es mit' 10' Reihen numerischen Vektor. ist das genau das was du machen willst? weil die Anzahl der Zeilen gleich sein sollte. – SirSaleh

+0

Ja, was ich tun würde, ist jedes Ergebnis der benutzerdefinierten Funktion zu erhalten, das basierend auf Datenrahmen durch Ändern der Spaltendaten berechnet wird (In realem Code verwende ich MAPLLY, um Eingabedaten aus der Datenrahmenspalte zu erhalten). ist LOOP nur Möglichkeit, z-Achsenergebnis zu erhalten? –

+0

Oder gibt es eine andere Funktion, die so ähnlich funktioniert wie die äußere? –

Antwort

0

Ich denke for loop nur so z-Achse Wert

Verwandte Themen