R - нечеткое объединение только для ближайшего целого числа

В TYPO3 6.x вам рекомендуется использовать классы с именами и указать configurePlugin метод вашего имени поставщика.

Поскольку вы не указали какой-либо из вашего кода контроллера, я попытаюсь набросать it:

  1. Сначала убедитесь, что вы используете класс контроллера с именами - не забудьте указать имя поставщика.
  2. Убедитесь, что ваши действия названы с помощью функции *Action suffix

EXT: myext / Classes / Controller / HotelController

namespace MyVendor\MyExt\Controller;
class HotelController {
    /**
    * @return void
    */
     public function listAction(){
     }
}

Затем укажите пространство имен в configurePlugin следующим образом:

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    'MyVendor.' . $_EXTKEY,
    // UpperCamelCase please, refer to [1]
    'Hotels',
     array('Hotel' => 'list,single,display,update,save,preview,edit')
);

Это позволяет локатору классов правильно разрешать классы.

Чтобы убедиться в этом, убедитесь, что вы повторно установили расширение.

PS: Пожалуйста, используйте классы с именами, когда это возможно, в 6.x. Старые классы Tx_* - это только псевдонимы и добавили дополнительную нагрузку на ваш интерпретатор.

1 - Документы API TYPO3 для ExtensionUtility :: configurePlugin ()

Обновление:

Существует множество возможных ошибок.

  1. Вы подключили FlexForm. Вы установили switchableControllerActions соответствующим образом?
  2. Одна вещь, которую я видел более одного раза: f:link.action (или f: uri.action соответственно) не любит быть без соответствующего атрибута controller
  3. Вы явно пропустили концепцию пространства имен :) Переименуйте свой ControllerClass в HotelController, и файл должен жить в Classes/Controller/HotelController.php, затем выполните настройки configurePlugin(), чтобы отразить имя поставщика, как я описал

-1
задан Frank 16 January 2019 в 19:36
поделиться

3 ответа

Вы можете сгруппировать по cumsum(Field == "Name"). С dplyr ...

library(dplyr) 
originalDF %>% 
  group_by(Name = Value[Field == "Name"][cumsum(Field == "Name")]) %>%
  slice(-1) %>% select(c("Name", "Field", "Value"))

# A tibble: 10 x 3
# Groups:   Name [4]
   Name  Field  Value
   <fct> <fct>  <fct>
 1 Bob   Weight 158  
 2 Bob   Age    22   
 3 Bob   Height 72   
 4 Fred  Age    155  
 5 Fred  Height 65   
 6 Irv   Weight 210  
 7 Irv   Age    42   
 8 Irv   Height 68   
 9 Sara  Weight 115  
10 Sara  Age    17   

С таблицей данных ...

library(data.table)
data.table(originalDF)[, 
  .SD[-1], 
by=.(Name = Value[Field == "Name"][cumsum(Field == "Name")]), .SDcols=c("Field", "Value")]
0
ответ дан Frank 16 January 2019 в 19:36
поделиться

Я рекомендую подходить к нему по-другому, отслеживая самое последнее значение «Имя» в каждой точке. fill() из пакета tidyr полезен для этого.

library(dplyr)
library(tidyr)

originalDF %>%
  mutate(Name = ifelse(Field == "Name", as.character(Value), NA)) %>%
  fill(Name) %>%
  filter(Field != "Name")

Вывод:

   Index  Field Value Name
1      2 Weight   115 Sara
2      3    Age    17 Sara
3      5 Weight   158  Bob
4      6    Age    22  Bob
5      7 Height    72  Bob
6      9 Weight   210  Irv
7     10    Age    42  Irv
8     11 Height    68  Irv
9     13    Age   155 Fred
10    14 Height    65 Fred

Однако, если вы действительно хотите использовать подход fuzzyjoin, вы можете добиться этого с помощью group_by() и slice() в своем результате, где вы возьмите последнюю строку для каждого значения Index.x.

fuzzy_left_join(detailsDF, namesDF, by = "Index", match_fun = list(`>`)) %>%
  group_by(Index.x) %>%
  slice(n()) %>%
  ungroup()

Вывод:

# A tibble: 10 x 6
   Index.x Field.x Value.x Index.y Field.y Value.y
     <int> <fct>   <fct>     <int> <fct>   <fct>  
 1       2 Weight  115           1 Name    Sara   
 2       3 Age     17            1 Name    Sara   
 3       5 Weight  158           4 Name    Bob    
 4       6 Age     22            4 Name    Bob    
 5       7 Height  72            4 Name    Bob    
 6       9 Weight  210           8 Name    Irv    
 7      10 Age     42            8 Name    Irv    
 8      11 Height  68            8 Name    Irv    
 9      13 Age     155          12 Name    Fred   
10      14 Height  65           12 Name    Fred   
0
ответ дан David Robinson 16 January 2019 в 19:36
поделиться

Вы можете использовать

x = which(originalDF$Field == "Name")
originalDF$Name = rep(originalDF$Value[x], times = diff(c(x, NROW(originalDF)+1)))
NewDF = originalDF[originalDF$Field != 'Name', c(4,2,3)]
#    Name  Field Value
# 2  Sara Weight   115
# 3  Sara    Age    17
# 5   Bob Weight   158
# 6   Bob    Age    22
# 7   Bob Height    72
# 9   Irv Weight   210
# 10  Irv    Age    42
# 11  Irv Height    68
# 13 Fred    Age   155
# 14 Fred Height    65
0
ответ дан dww 16 January 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: