#r #subset #r6
Вопрос:
В R я могу использовать .subset2
, чтобы действовать как a [[
или $
без отправки.
> a <- new.env()
> a$foo <- 3
> .subset2(a, "foo")
[1] 3
Однако я, похоже, не могу найти эквивалент для операции настройки без отправки:
> .subset2(a, "foo") <- 5
Ошибка в .subset2(a, «foo») <- 5 : не удалось найти функцию
«.subset2
Как я могу что-то установить без неявной диспетчеризации с использованием операторов [[<-
или $<-
?
Комментарии:
1. что с ними не так? чего вы пытаетесь добиться, чего нельзя добиться без какого-то рода
.subset2<-()
?2. @mnist нет .подмножество 2-
3. @mnist Я пытаюсь переопределить поведение доллара для некоторых классов R6. Я вхожу в рекурсию, если есть отправка.
4. «Я пытаюсь переопределить поведение доллара для некоторых классов R6». Означает ли это, что вы намерены замаскировать
$<-
функцию? Это может иметь серьезные последствия для производительности. Я бы рекомендовал.Primitive
не использовать функции маскировки.5. @Roland Меня не волнует производительность. Я хочу, чтобы возникала ошибка, когда я ссылаюсь на что-то, чего не существует. Вы, люди, слишком озабочены производительностью
Ответ №1:
Возможно, вы ищете assign
:
Описание: Присвоение значения имени в среде.
assign("foo", 5, envir = a)
Кстати, вместо использования .subset2
(которое является внутренней функцией в базовом пакете и может быть перепутано с subset
), вы можете захотеть использовать get
:
get("foo", envir = a)
# [1] 5
Ответ №2:
Может быть, мы сможем попробовать
with(a,assign("foo",5))
или
with(a, `<-`(foo, 5))
или
a$foo <- 5
Ответ №3:
Я не совсем уверен, что это то, что вам нужно, но это соответствует предварительным требованиям по установке значения foo
в a
среде без явного использования операторов $
, [
, [[
, <-
:
# Your code:
a <- new.env()
a$foo <- 3
.subset2(a, "foo")
# Solution:
list2env(
list(
foo = 5
),
env = a
)
# Proof:
a$foo