Проблемы с уровнем разрешений в SharePoint Online

Таким образом, кажется, что эта проблема больше связана с $ и тем, как обычно ожидают, что имена без кавычек будут вторыми параметрами, а не строками. Посмотрите на этот пример

dflist <- list(
    data.frame(a=1:3, z=31:33), 
    data.frame(b=10:12, a=4:6, z=31:33)
)
lapply(dflist, 
    function(x, z) {
        print(paste("z:",z)); 
        `$`(x,z)
    }, 
    z="a"
)

Мы видим результаты

[1] "z: a"
[1] "z: a"
[[1]]
[1] 31 32 33

[[2]]
[1] 31 32 33

, поэтому значение z устанавливается на «a», но $ не оценивает второй параметр. Поэтому он возвращает столбец «z», а не столбец «a». Это приводит к этому интересному набору результатов

a<-"z"; `$`(dflist[[1]], a)
# [1] 1 2 3
a<-"z"; `$`(dflist[[1]], "z")
# [1] 31 32 33

a<-"z"; `$.data.frame`(dflist[[1]], a)
# [1] 31 32 33
a<-"z"; `$.data.frame`(dflist[[1]], "z")
# [1] 31 32 33

. Когда мы называем $.data.frame непосредственно, мы обходим стандартную депарацию, которая встречается в примитиве до отправки (что происходит вблизи здесь в источнике).

Добавленный catch с lapply заключается в том, что он передает аргументы функции через механизм .... Например,

lapply(dflist, function(x, z) sys.call())
# [[1]]
# FUN(X[[2L]], ...)

# [[2]]
# FUN(X[[2L]], ...)

Это означает, что при вызове $ он отбрасывает ... в строку "...". Это объясняет это поведение

dflist<- list(data.frame(a=1:3, "..."=11:13, check.names=F))
lapply(dflist, `$`, "a")
# [[1]]
# [1] 11 12 13

То же самое происходит, когда вы пытаетесь использовать ... самостоятельно

f<-function(x,...) `$`(x, ...); 

f(dflist[[1]], "a");
# [1] 11 12 13
`$`(dflist[[1]], "a")
# [1] 1 2 3

0
задан Lukas Nespor 16 January 2019 в 20:46
поделиться