2013-02-13 3 views
-1

Я хочу сохранить дополнительную информацию поверх data.frame и вернуть ее из функции. как вы можете видеть - дополнительные данные исчезают. пример:возвращает полный data.frame из функции в R

> d<-data.frame(N1=c(1,2,3),N2=(LETTERS[1:3])) 
> d 
    N1 N2 
1 1 A 
2 2 B 
3 3 C 
> d.x = 3 
> d 
    N1 N2 
1 1 A 
2 2 B 
3 3 C 
> d.x 
[1] 3 
> foo1 <- function() { 
+ d<-data.frame(N1=c(1,2,3),N2=(LETTERS[1:3])) 
+ d.x=3 
+ return(d) 
+ } 
> 
> d1<-foo1() 
> d1 
    N1 N2 
1 1 A 
2 2 B 
3 3 C 
> d1.x 
Error: object 'd1.x' not found 

я посмотрел в assign, но так как data.frame создается внутри функции и возвращается я предполагаю, что это не имеет значения здесь. Спасибо.

+0

Это мало смысла. Как именно значение 3 должно быть добавлено «поверх» кадра данных d? Новая строка? Атрибут? – joran

+0

Я знаю, что вы имеете в виду, но он работает, и это то, что мне нужно. единственная проблема заключается в том, что когда я возвращаю data.frame из функции, дополнительные данные не возвращаются. Мне просто нужно вернуть структуру данных, содержащую как строки данных, так и метаданные. – haki

+0

вам нужно минимальное введение в R. d.x - отдельный объект, никак не связанный с x. если вы хотите иметь столбец в d, называемый x, то вы ссылаетесь на него как на d $ x – lebatsnok

ответ

1

Ваши комментарии показывают, вы хотите создать атрибут (обычный способ прикрепить "метаданные" к объектам R) под названием «d 0,3" и использовать foo1, чтобы установить этот атрибут для dataframe:

d <- data.frame(N1=c(1,2,3),N2=(LETTERS[1:3])) 
foo1 <- function(d, attrib) { 
    attr(d, "d.x") <- attrib 
    return(d) 
    } 
d <- foo1(d, 3) # need to assign value to 'd' since function results are not "global" 
d # note that the default print method for dataframes does not show the attributes 
#--------- 
    N1 N2 
1 1 A 
2 2 B 
3 3 C 
#----- 
attributes(d) 
#----- 

$names 
[1] "N1" "N2" 

$row.names 
[1] 1 2 3 

$class 
[1] "data.frame" 

$d.x 
[1] 3 

См ?attr и ?attributes для более подробной информации. Существует также функция comments.

0

Изменить это:

d.x=3 

к этому:

d$x=3 
+0

Хотя ответ правильный, объяснение того, кому требуется изменение, было бы полезно. –

+0

Возможно, это OP, но мы должны отметить, что он создаст целую колонку из 3, а не одно значение. – joran

Смежные вопросы