2017-07-13 7 views
0

zunächst sorry, wenn dies eine dumme Frage ... ich R lerne, und wirklich zu viel ErfahrungWie Wert von einer Spalte nehmen und speichern sie in neu erstellte Spalte Funktionsaufruf mit

Ich habe folgende dont haben Funktion in R-Programmiersprache, die Wert nimmt und Wert zurückgibt.

dec2binSingle <- function(decimal) { 
print(decimal) 
binaryValue <- "" 
index <- 0 
decimal <- as.numeric(decimal) 
while(decimal != 0) { 
print(decimal) 
    temp <- as.numeric(decimal) %% 2 
    if (temp == 1) { 
     binaryValue <- paste("1", binaryValue, sep="", collapse = NULL) 
     decimal <- decimal - 1 
    } else { 
     binaryValue <- paste("0", binaryValue, sep="", collapse = NULL) 
    } 
    index <- index + 1 
    decimal <- decimal/2 
} 
return(binaryValue) 
} 

Die Funktion konvertiert die Dezimalzahl in eine binäre Entsprechung.

Wenn ich versuche, um die Funktion aufzurufen, schließt die Funktion ohne Fehler, aber wenn ich versuche, um die Daten zu sehen, wird die folgende Fehlermeldung angezeigt:

Error in View : 'names' attribute [200] must be the same length as the vector [1] 

Und das ist die Art und Weise, wie die Funktion ist genannt zu werden:

test_function <- function(value1) {return(dec2binSingle(as.numeric(unlist(value1))))} 


data_example$tv <- with(data_example, test_function(data_example[which(colnames(data_example) == "numbers")])) 

Jede Hilfe ist willkommen ... dank

EDIT:

Ich habe die Funktion für Einzelwert aufgerufen und es funktioniert wie erwartet.

> dec2binSingle(23) 
[1] "10111" 
> 
+0

Ziemlich sicher, dass diese Funktion nicht tut, was Sie denken, es tut. Können Sie ein Beispiel für die Eingabe und die erwartete Ausgabe angeben? – CPak

+0

@ChiPak Ich habe das Beispiel der Funktion hinzugefügt, die – depecheSoul

Antwort

1

Ich hoffe, das ist, was Sie mit Ihrem Code erreichen wollten.

#sample data 
df <- data.frame(char1=c("abc","def","xyz"), num1=c(1,34,12), num2=c(34,20,8)) 
df 

#function to convert decimal into binary 
bin_func <- function(x) {gsub("^0+","",paste(rev(as.numeric(intToBits(x))), collapse=""))} 

#verify which all columns are numeric 
num_col <- sapply(df,is.numeric) 
df1 <- as.data.frame(lapply(df[,num_col], FUN = function(x) {sapply(x, FUN = bin_func)})) 
names(df1) <- paste(names(df1),"_converted",sep="") 

#final dataframe having original as well as converted columns 
df <- cbind(df,df1) 
df 

Bitte vergessen Sie nicht, uns zu informieren, wenn es :) half

+0

genannt wird Dies ist, was ich mit dem Skript tun wollte ... danke – depecheSoul

Verwandte Themen