Size: a a a

R (язык программирования)

2020 November 12

a

aGricolaMZ in R (язык программирования)
Артём Клевцов
Исправь на assing(obj, "name", parent.env()) или что-то подобное.
For the record, я использовал такую конструкцию.

assign("var", value, parent.frame())
источник

ИП

Иван Поздняков... in R (язык программирования)
так, ладно, я снова перепутал enclosing и parent environment, но вот пример того, когда <<- ведет себя *не* как присвоение в глобал окружение

> a <- 0
> f <- function(x){
+   a <- 10
+   g <- function(x) {
+     a <<- 100
+     b <<- 100
+   }
+   g()
+ }
> f()
> a
[1] 0
> b
[1] 100
источник

AS

Alexander Semenov in R (язык программирования)
Даже не знаю, радоваться или расстраиваться от того, что я не понимаю, что вы тут обсуждаете.
источник

EP

Ed P in R (язык программирования)
Иван Поздняков
так, ладно, я снова перепутал enclosing и parent environment, но вот пример того, когда <<- ведет себя *не* как присвоение в глобал окружение

> a <- 0
> f <- function(x){
+   a <- 10
+   g <- function(x) {
+     a <<- 100
+     b <<- 100
+   }
+   g()
+ }
> f()
> a
[1] 0
> b
[1] 100
я уверен, что найдется какое-нибудь руководство вроде good programming practice, которое не рекомендует писать "вложенные" функции :)

А так да - прикольный пример!
источник

IR

Ignatius Reilly in R (язык программирования)
Ed P
я уверен, что найдется какое-нибудь руководство вроде good programming practice, которое не рекомендует писать "вложенные" функции :)

А так да - прикольный пример!
А почему вы считаете, что писать вложеннные функции плохо?
источник

EP

Ed P in R (язык программирования)
мне кажется, в б-ве случаев это дурацкое/костыльное решение. Дебажить тяжело, например. В реальности я такое видел в других языках, обычно либо спроектировано криво, либо в последний момент доделывали ради сроков.
источник
2020 November 13

ИП

Иван Поздняков... in R (язык программирования)
теперь я сам уже запутался немного.
> a <- 1
> g <- function(x) {
+   a <<- 100
+   b <<- 100
+ }
> f <- function(x){
+   a <- 10
+   g()
+ }
> f()
> a
[1] 100
> b
[1] 100

Тот же самый пример, что и раньше, но теперь g() задается вне f(), то есть Global.env является enclosing environment, а не окружение f(). То есть имеет значение для scoping все-таки иерархия enclosing environments, а не parent environments, поскольку parent environment не изменился.

Однако хэлп по <<- говорит все-таки про parent environment.

The operators <<- and ->> are normally only used in functions, and cause a search to be made through parent environments for an existing definition of the variable being assigned. If such a variable is found (and its binding is not locked) then its value is redefined, otherwise assignment takes place in the global environment.

В общем, высока вероятность, что я где-то здесь запутался просто
источник

PU

Philipp Upravitelev in R (язык программирования)
а что не так-то?
<<- тебе изменяет/создает объект в том окружении, в котором была объявлена функция
источник

PU

Philipp Upravitelev in R (язык программирования)
Alexander Semenov
Даже не знаю, радоваться или расстраиваться от того, что я не понимаю, что вы тут обсуждаете.
не используй <<-, вот тебе ключевой вывод :)
источник

PU

Philipp Upravitelev in R (язык программирования)
Philipp Upravitelev
а что не так-то?
<<- тебе изменяет/создает объект в том окружении, в котором была объявлена функция
есть конечно страннвя формулировка, что если объект заблокирован, то будет создан объект в глобальном окружении
но это что-то за пределами реальной практики, мне кажется %)
источник

AS

Alexander Semenov in R (язык программирования)
Не вопрос. Я ж с Global.env не химичу.
источник

ИП

Иван Поздняков... in R (язык программирования)
Philipp Upravitelev
а что не так-то?
<<- тебе изменяет/создает объект в том окружении, в котором была объявлена функция
То есть именно объявлена, а не вызвана? Это противоречит хэлпу тогда
источник

PU

Philipp Upravitelev in R (язык программирования)
хм. странное поведение, все же. не понимать %(
источник

PU

Philipp Upravitelev in R (язык программирования)
Иван Поздняков
То есть именно объявлена, а не вызвана? Это противоречит хэлпу тогда
смотри, чо
> rm(f, g, a)
> f <- function() {
+   print(parent.frame(n = 1))
+   a <- 5
+   print(a)
+   g <- function() {
+     print(parent.frame(n = 1))
+     print(parent.frame(n = 2))
+     a <<- 100
+     return(invisible(NULL))
+   }
+   g()
+   print(a)
+   return(invisible(NULL))
+ }
> f()
<environment: R_GlobalEnv>
[1] 5
<environment: 0x559a7d751038>
<environment: R_GlobalEnv>
[1] 100
> a
Error: object 'a' not found
источник

PU

Philipp Upravitelev in R (язык программирования)
а вот что происходит, если вложенную функцию объявлять в глобальном окружении, где и f
> rm(f, g, a)
> g <- function() {
+   print(parent.frame(n = 1))
+   print(parent.frame(n = 2))
+   a <<- 100
+   return(invisible(NULL))
+ }
> f <- function() {
+   print(parent.frame(n = 1))
+   a <- 5
+   print(a)
+   g()
+   print(a)
+   return(invisible(NULL))
+ }
> f()
<environment: R_GlobalEnv>
[1] 5
<environment: 0x559a7c017000>
<environment: R_GlobalEnv>
[1] 5
> a
[1] 100
источник

PU

Philipp Upravitelev in R (язык программирования)
но ситуация становится в разы забавнее, когда из функций убрать a <- 5, тогда независимо от того, как объявлена g(), a, во-первых, выводится на печать из окружения f, а во-вторых, появляется в глобальном окружении
> rm(f, g, a)
> f <- function() {
+   print(parent.frame(n = 1))
+   g <- function() {
+     print(parent.frame(n = 1))
+     print(parent.frame(n = 2))
+     a <<- 100
+     return(invisible(NULL))
+   }
+   g()
+   print(ls())
+   print(a)
+   return(invisible(NULL))
+ }
> f()
<environment: R_GlobalEnv>
<environment: 0x559a7f63e380>
<environment: R_GlobalEnv>
[1] "g"
[1] 100
> a
[1] 100
источник

PU

Philipp Upravitelev in R (язык программирования)
чота это какая-то дичь. и у меня нет этому нормального объяснения
как и с округлением 0.015 в R и питоне до второго знака %)
источник

S

Stan in R (язык программирования)
Пора видимо пилить кому-то R 4.0.4
источник

БА

Байкулов Антон... in R (язык программирования)
ТоваRищи!

Возможно это будет странный вопрос, но:
А как проверять размер файла в R и очищать его?

Нашёл всякие file.size и file.info - но у меня в значениях получается NA. Хотя сам файл есть и имеет размер.
источник

АК

Артём Клевцов... in R (язык программирования)
Байкулов Антон
ТоваRищи!

Возможно это будет странный вопрос, но:
А как проверять размер файла в R и очищать его?

Нашёл всякие file.size и file.info - но у меня в значениях получается NA. Хотя сам файл есть и имеет размер.
Проверяй пути, если файл есть, значит должен быть и размер.
источник